问题描述
所以我想用 C 编写一个程序,该程序打印名称的首字母,但面临一个问题。我的程序不应将 .
打印为最后一个字符,我已经尝试过:
#include <stdio.h>
#include <string.h>
int main(){
printf("Enter your Name : \n");
char name[25];
gets(name);
int i;
printf("%c.",name[0]);
for(i=0;name[i]!='\0';i++){
if(name[i]==' '){
printf("%c",name[i+1]);
if(i<strlen(name)){
printf(".");
}
}
}
return 0;
}
但是在使用示例输入 Satyajit Kumar Ghosh
运行此程序时,它给出了输出“S.K.G.”我不明白为什么要打印“。”最后我给出条件
if(i<strlen(name)
解决方法
程序应该如下。您在检测空白时逐个字符地打印,因此代码在 G 之后添加了最后一个点,而不是在它之前。
#include <stdio.h>
#include <string.h>
int main(){
printf("Enter your Name : \n");
char name[25];
gets(name);
int i;
printf("%c",name[0]);
for(i=0;name[i]!='\0';i++){
if(name[i]==' '){
printf(".");
printf("%c",name[i+1]);
}
}
return 0;
}
,
条件检查 (i i到达字符'G'的位置时,i的值只有15(显然通过了条件检查)。
根据我的推断,您希望结果是 S.K.G。我的建议是你单独打印第一个首字母,然后为每个后面的首字母打印'.%c'。所以代码应该是这样的:
// Assuming there is at least a word
printf("%c",name[0]);
for(i=1;name[i]!='\0';i++){
if(name[i]==' '){
printf(".%c",name[i+1]);
}
}
,
您可能正在倒退。您正在打印下一个字符,后跟一个 '.'每次遇到“ ”(空格)时。这意味着,当您遇到 Kumar 和 Ghosh 之间的空格时,它会说打印“G”后跟“.”。
您可以尝试从字符串的开头或最后一个空格之后存储您遇到的最后一个字符,然后打印它后跟一个 '.'如果您遇到另一个空格或空 '\0' 字符。
,当您的 image = tf.io.read_file(tf_filepath)
image = tf.image.decode_png(image,channels=3,dtype=tf.uint8)
从 Ghosh 到达 G 时,它远远落后于字符串的末尾。当您调用最后一个 if 语句时,我在您的示例中为 15。但是您的字符串更长。这应该有效:
i