在循环中想让一个字符串遇到'\0'再退出循环,但是遇到空格就已退出是怎么回事?


#include<stdio.h>
void f5() {
    char str[200];
    int num1=0, num2=0, num3=0, num4=0;          
    printf("Please enter the string: ");
    scanf_s("%s", str,200);
    for (int i = 0; str[i] != '\0'; i++) {
        if ((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z'))
            num1++;                          //统计字母
        else if (str[i] >= '0' && str[i] <= '9') num2++;           //统计数字
        else if (str[i] == ' ') num3++;                      //统计空格
        else num4++;                                        //统计其他
    }
    printf("\n字母数为%d\n数字数为%d\n空格数为%d\n其他字符为%d\n", num1, num2, num3, num4);
}

img

scanf_s("%s", str,200);

改成scanf_s("%[^\n]",str, 200); 

scanf默认接收到空格为止,所以后面的没有接收,你这里需要换成gets
有帮助望采纳!