gcc -Wall main.c -o a.out
./a.out < inputfile.txt
我想从./a.out < inputfile.txt
这样的文件中读取并在通过char迭代char之后,如果所有字符都是字母数字,则打印OK,否则输出ERROR。我似乎无法让这个工作。
the brown fox jumped over the dog
this is another string
here is another string
int main() {
char c;
while (!feof(stdin)) {
c = getchar();
if (!isalnum(c)) {
printf("ERROR!\n");
exit(1);
}
}
printf("OK\n);
return 0;
}
答案 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");