检查文件中是否只包含C

时间:2015-09-01 20:34:59

标签: c

运行命令序列:

gcc -Wall main.c -o a.out

./a.out < inputfile.txt

我想从./a.out < inputfile.txt这样的文件中读取并在通过char迭代char之后,如果所有字符都是字母数字,则打印OK,否则输出ERROR。我似乎无法让这个工作。

inputfile.txt

the brown fox jumped over the dog

this is another string

here is another string

的main.c

int main() {

char c;

while (!feof(stdin)) {
    c = getchar();
    if (!isalnum(c)) {
        printf("ERROR!\n");

        exit(1);
    }
    }
printf("OK\n);

return 0;
}

3 个答案:

答案 0 :(得分:3)

正如其他人所说 - 空格和新线不是alnum字符。在这种情况下使用isalnum() + isspace()。除此之外,请考虑使用某种标志而不是使用exit()函数:

#include <stdio.h>
#include <ctype.h>

int main()
{
    int c;
    char ok='Y';

    while(c = getchar())
    {
        if(c == EOF) break;

        if(!isalnum(c) && !isspace(c))
        {
            ok = 'N';
            break;
        }
    }

    printf("%c\n", ok);
    return 0;
}

RTFM:http://www.cplusplus.com/reference/cctype/
我发誓这是我最后一次帮助那些甚至无法调试代码的人。

答案 1 :(得分:2)

空格不是字母数字字符。

请参阅this page中的表格,了解“isalnum”是什么或不是什么。

答案 2 :(得分:2)

您正在使用feof wrong。当EOF指示符已经设置时,feof返回true,即:当您已经读过EOF时。因此,当stdin到达文件结尾时,您仍然会使用EOF进行一次循环迭代,这不是字母数字字符。为了确保您能够正确区分EOF与任何有效字符,您应将c声明为int。我建议:

int c = getchar();
while(c != EOF){
    if(!isalnum(c)){
        printf("ERROR!\n");
        exit(1);
    }

    c = getchar();
}

printf("OK\n");