打印不带“.”的首字母作为最后一个角色

Printing of initials without "." as the last character

所以我想用 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]!='[=10=]';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) 

程序应该如下所示。您在检测白色 space 时在字符后打印点,因此代码在 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]!='[=10=]';i++){
        if(name[i]==' '){
            printf(".");
            printf("%c",name[i+1]);
        }
    }
    return 0;
}

条件检查 (i < strlen(name)) 没有完成任务。当迭代变量i到达字符'G'的位置时,i的值只有15(这显然是通过条件检查)。

根据我的推断,您期望的结果是 S.K.G。我的建议是分别打印第一个首字母,然后对于后面的每个首字母,打印出“.%c”。所以代码应该是这样的:

// Assuming there is at least a word
printf("%c", name[0]);
for(i=1;name[i]!='[=10=]';i++){
    if(name[i]==' '){
        printf(".%c",name[i+1]);
    }
}

您可能正在倒退。您正在打印下一个字符,后跟“。”每次你 运行 变成 ' ' (space)。这意味着,当您 运行 进入 Kumar 和 Ghosh 之间的 space 时,它会说打印 'G' 后跟 '.'.

您可以尝试存储从字符串开头或最后一个 space 之后遇到的最后一个字符,然后打印它并在其后跟一个“.”。如果您遇到另一个 space 或 null '\0' 字符。

当您的 i 从 Ghosh 到达 G 时,它远远落后于字符串的末尾。当您调用最后一个 if 语句时,我在您的示例中为 15。但是您的 String 更长。这应该有效:

#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]!='[=10=]';i++){
        if(name[i]==' '){

            printf(".%c",name[i+1]);
        
        }
    }
    return 0;
}