我很困惑为什么我的程序运行不好。我通过我的Windows PC使用PuTTY连接到服务器。它总是很好但我觉得奇怪的事情发生了。 这里是identify.c的代码:
#include <stdio.h>
#include <ctype.h>
int main()
{
while(1)
{
char word[256];
int i;
int validity = 1;
scanf("%s", word);
for(i=0; word[i]!='\0'; i++)
{
if(i == 0)
{
/* First character should only be underscore or a letter */
if(word[i]!= '_' && !isalpha(word[i]))
{
validity = 0;
break;
}
}
else
{
/* Rest can be Alpha-numerics or underscore */
if(word[i]!= '_' && !isalnum(word[i]))
{
validity = 0;
break;
}
}
}
if(validity)
printf("valid\n");
else
printf("invalid\n");
}
return 0;
}
这里是用于测试名称是否是可能的标识符名称的输入文件。 identitytest.txt:
name
name2
2name
_name
__name
na_me
@name
na-me
然后我使用FileZilla将这两个文件上传到我的服务器。
然后我执行以下命令来生成identify.c可执行文件:
gcc identify.c -o identify
已创建可执行文件。 然后我运行以下命令:
identify <identifytest.txt >output.txt
创建的output.txt然后为空。
任何想法为什么?在过去的两天里,我一直在疯狂,不知道发生了什么。
答案 0 :(得分:1)
当std输入关闭时,你必须打破无限循环:
if (scanf("%s", word) == EOF) break;
您也可以刷新标准输出以强制将结果写入输出文件:
fflush(stdout);
答案 1 :(得分:0)
您的程序没有退出条件。我只添加了一行
if(i == 0)
{
if (word[i] == '!') return 0; // <--- added this line
...
然后命令(与你的相似)
test <test.txt >output.txt
在读取行output.txt
后将预期结果写入"!"
。