这个理论上,我输入结束后按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;
}
标准输入流是行缓冲的,输入数据后必须回车,程序才开始从输入流中提取输入。
在Windows系统下,输入Ctrl+Z再回车,则表示输入流结束。
在Linux系统下,输入Ctrl+D,表示输入流结束。
如果你用的是VS的高版本(比如VS2022),需要连续输入3次CTRL+Z才能结束,在VS2008中就没有这个问题。这个问题目前没有解决方法。
如果是刷题,不影响平台的运行结果。如果觉得难受,建议卸载后重装VS2008,这是个经典版本,这个版本的代码和输入输出跟各大平台的兼容性比较好。
给你个VS2008的下载地址:
链接: https://pan.baidu.com/s/1zFzTA7gEn7ymI1psokdy4Q 提取码: vypj
如有帮助,望采纳,感谢。
输完之后先按回车,然后Ctrl+z。
有帮助的话采纳一下哦!
第42行,输入语句,str[num] 前面多了'&'符,应修改为: scanf("%s", str[num])//scanf("%s", &str[num])
VS里,ctrl+z 结束输入,回车,Ctrl+z,需连输三次才会有反馈。