Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C程序中的文件结束(EOF)_C_Eof_Getchar - Fatal编程技术网

C程序中的文件结束(EOF)

C程序中的文件结束(EOF),c,eof,getchar,C,Eof,Getchar,我编写了一个简单的C程序,当输入EOF字符(windows为Ctrl-Z)时,该程序需要完成,并且应该打印: 如果等级高于或等于5,则通过 如果等级高于或等于8,则以高通通过 任何其他情况下均失败 我使用getchar() #包括 int main(){ 国际等级; 放置(“输入等级”\n); puts(“输入EOF字符以结束输入\n”); 而((grade=getchar())!=EOF){ 如果(等级>=5){ 认沽权(“通过”); 如果(等级>=8){ puts(“带高通\n”); }

我编写了一个简单的C程序,当输入
EOF
字符(windows为Ctrl-Z)时,该程序需要完成,并且应该打印:

  • 如果等级高于或等于5,则通过
  • 如果等级高于或等于8,则以高通通过
  • 任何其他情况下均失败
我使用
getchar()

#包括
int main(){
国际等级;
放置(“输入等级”\n);
puts(“输入EOF字符以结束输入\n”);
而((grade=getchar())!=EOF){
如果(等级>=5){
认沽权(“通过”);
如果(等级>=8){
puts(“带高通\n”);
}
}否则{
puts(“失败的\n”);
}
}
返回0;
}

问题是程序没有执行应该执行的操作,如果您能帮助我找到解决方案,我将不胜感激。

您得到的是输入数字的ascii码,而不是它的值。将其转换为比较前的数字

while ((grade = getchar()) != EOF) {
    getchar();  // flush the \n
    if (isdigit(grade))
    {
        int intgrade = grade - '0';

        if (intgrade >= 5) {
            puts("Passed");
            if (intgrade >= 8) {
                puts("with High Pass\n");
            }
        }
        else {
            puts("Failed\n");
        }
    }
    else printf("Wrong entry\n");
}

return 0;

您得到的是输入数字的ascii码,而不是其值。将其转换为比较前的数字

while ((grade = getchar()) != EOF) {
    getchar();  // flush the \n
    if (isdigit(grade))
    {
        int intgrade = grade - '0';

        if (intgrade >= 5) {
            puts("Passed");
            if (intgrade >= 8) {
                puts("with High Pass\n");
            }
        }
        else {
            puts("Failed\n");
        }
    }
    else printf("Wrong entry\n");
}

return 0;

程序无法按预期运行,原因有二:

  • stdin
    读取的字节不是数值:如果用户键入
    1
    ,程序将接收
    '1'
    ,它是字符值,而不是数值。您可以通过减去
    '0'
    的字符值来计算数字字符的数值:

    int c = getchar();
    if (c >= '0' && c <= '9') {
        int grade = c - '0';
        /* you can now test the grade */
    

    程序无法按预期运行,原因有二:

    • stdin
      读取的字节不是数值:如果用户键入
      1
      ,程序将接收
      '1'
      ,它是字符值,而不是数值。您可以通过减去
      '0'
      的字符值来计算数字字符的数值:

      int c = getchar();
      if (c >= '0' && c <= '9') {
          int grade = c - '0';
          /* you can now test the grade */
      

      您可以进行简单的转换,例如:
      int grade\u as\u int=(int)grade@m.nachury-你不能。它不会将
      '1'
      转换为整数1。它将
      等级分配为等级的ascii码。如果插入的数字超过一位,则“高通”将全部通过,它将刷新第二位而不是
      \n
      ,因此对于
      45
      ,输出失败。这是错误的。这是所问问题的答案。与你交谈是毫无意义的。我只是想告诉你,对于更高的输入来说,
      9
      是错误的。因为OP writed grade大于或等于8,而位数较多的数字大于或等于8。您可以进行简单的转换,例如:
      int grade\u as\u int=(int)grade@m.nachury-你不能。它不会将
      '1'
      转换为整数1。它将
      等级分配为等级的ascii码。如果插入的数字超过一位,则“高通”将全部通过,它将刷新第二位而不是
      \n
      ,因此对于
      45
      ,输出失败。这是错误的。这是所问问题的答案。与你交谈是毫无意义的。我只是想告诉你,对于更高的输入来说,
      9
      是错误的。因为OP WRITED grade大于或等于8,且数字较多的数字大于或等于8。请注意,
      EOF
      不是字符,而是遇到文件结束条件时(或某些情况下出现错误时)某些函数返回值的宏。如果用户输入“A”而不是8怎么办?请注意,
      EOF
      不是字符,而是遇到文件结束条件时(或在某些情况下出现错误时)某些函数返回的值的宏。如果用户输入“A”而不是8怎么办?足够清楚。谢谢:)够清楚了。谢谢:)