关于c语言输入字符串的问题

这个理论上,我输入结束后按ctrl+z就应该输入中止,但却一直没有中止
然后多按了几下莫名其妙中止了,不知道怎么回事

#include 
#include 
#include 

int num(char *str)
{
    int len,i,sum=0,flag=0;
    len=strlen(str);
    for(i = 0; i < len; ++i)
        if (str[i] >= '0' && str[i] <= '9')
        {
            sum = 10 * sum + str[i] - '0';
            flag = 1;
        }
    if (flag == 0)
        sum = -1;
    return sum;

}
int strnumcmp(const void* a, const void* b)
{
    int s1, s2;
    char* str1, *str2;
    str1 = (char*) a;    str2 = (char*) b;
    s1 = num(str1);
    s2 = num(str2);
    if (s1 == s2)
        return strcmp(str1, str2);
    else
    {
        if (s1 > s2)
            return 1;
        else
            return -1;
    }
}

int main()
{
    char str[110][40];
    int num=0,i;
    while(scanf("%s",&str[num])!=EOF)
          {
              num++;
          }
    qsort(str,num,sizeof(str[0]),strnumcmp);
    for(i=0;iprintf("%s ",str[i]);
    return 0;
}


img

标准输入流是行缓冲的,输入数据后必须回车,程序才开始从输入流中提取输入。
在Windows系统下,输入Ctrl+Z再回车,则表示输入流结束。
在Linux系统下,输入Ctrl+D,表示输入流结束。

如果你用的是VS的高版本(比如VS2022),需要连续输入3次CTRL+Z才能结束,在VS2008中就没有这个问题。这个问题目前没有解决方法。
如果是刷题,不影响平台的运行结果。如果觉得难受,建议卸载后重装VS2008,这是个经典版本,这个版本的代码和输入输出跟各大平台的兼容性比较好。
给你个VS2008的下载地址:
链接: https://pan.baidu.com/s/1zFzTA7gEn7ymI1psokdy4Q 提取码: vypj

如有帮助,望采纳,感谢。

img

输完之后先按回车,然后Ctrl+z。
有帮助的话采纳一下哦!

第42行,输入语句,str[num] 前面多了'&'符,应修改为: scanf("%s", str[num])//scanf("%s", &str[num])
VS里,ctrl+z 结束输入,回车,Ctrl+z,需连输三次才会有反馈。