C程序不工作(可能是for或if有问题)

fnatzsnv  于 2023-08-03  发布在  其他
关注(0)|答案(1)|浏览(80)
#include <stdio.h>
#include <string.h>
#include <ctype.h>

int main(void)
{
    printf("print your full name: ");
    char name[50];
    scanf("%[^\n]s", name);
    printf("%s %c", name, toupper(name[0]));
    for(int i = 1; i < strlen(name); i++)
    {
        if(name[i] == ' ')
        {
            printf("%c", name[i++]);
        }
    }

    printf("\n");
}

字符串
这个程序必须打印某人的姓名首字母,但它没有。我真的不知道为什么。它只打印第一个字母。

gg58donl

gg58donl1#

您使用i的后增量,因此它会导致打印一个空格。相反,使用pre-increment来打印空格后的字符 *。
示例如下:

#include <ctype.h>
#include <stdio.h>
#include <string.h>

int main(void) {
    printf("print your full name: ");
    char name[50];
    if (fgets(name, sizeof name, stdin) == NULL) return 1;
//      ^^^^^ scanf replacement
    printf("%s %c", name, toupper((unsigned char)name[0]));
    
    for (size_t i = 1, len = strlen(name); i < len; i++) {
        if (name[i] == ' ' && i + 1 < len) {
//                            ^^^^^^^^^^^ bounds check
            putchar(toupper((unsigned char)name[++i]));
//                                              ^^^ pre-increment
        }
    }

    putchar('\n');
}

字符串

相关问题