程序运行后不输出?

时间:2015-05-22 19:56:17

标签: c input output executable

我很困惑为什么我的程序运行不好。我通过我的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然后为空。

任何想法为什么?在过去的两天里,我一直在疯狂,不知道发生了什么。

2 个答案:

答案 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后将预期结果写入"!"