【问题标题】:Why these c code not working? Whats wrong with these?为什么这些 c 代码不起作用?这些有什么问题?
【发布时间】:2011-07-07 10:24:26
【问题描述】:
#include < stdio.h >

#include < string.h >

int main()

{

unsigned char a;

FILE *P;

P=fopen("mola.txt","r");

while((a=getc(P))!=EOF)

printf("%c",a);

}

这些代码有什么问题?当我编译时,它会发出警告“由于数据类型范围有限,比较总是正确的。”这个警告是什么意思?

【问题讨论】:

    标签: c


    【解决方案1】:

    您将getc 的结果存储在char 中。它应该是int。上面还有一个C FAQ。您还应该检查fopen 的返回值。

    P=fopen("mola.txt","r");
    if (NULL == P) {
        perror("fopen"):
    }
    

    while 看起来也很可疑。试试缩进?

    while((a=getc(P)) != EOF)
        printf("%c",a);
    

    【讨论】:

    • 它没有打印任何东西,只是一个空白输出。
    • 尽量使用花括号,它更简洁,即使是一行。 C 不是 Python。
    【解决方案2】:

    这就是它所说的意思

    由于数据类型的范围有限,比较总是正确的。

    有问题的数据类型(a,也就是unsigned char)的范围是从0到255(真的是UCHAR_MAX);

    EOF 的值为 -1

    您正在比较 a(从 0 到 255)与 -1

    (a != -1)
    

    条件永远为真

    【讨论】:

      【解决方案3】:

      试试:

      #include <stdio.h>
      #include <string.h>
      int main()
      {
      int a;
      FILE *P;
      P=fopen("tryit2.c","r");
      while(EOF != (a = fgetc(P))) {
              printf("%c",a);
          }
      }
      

      你有两个问题“getc()”返回一个整数而不是一个字符。而 while 语句在原始顺序中有一些奇怪的副作用。

      【讨论】:

      • 您没有将 unsigned char 修复为 int,因为它应该完成!就像 OP 写的一样!
      • @Shin -- 糟糕,贴错了版本!感谢您指出!
      【解决方案4】:

      这意味着在a=getc(p)时,循环将陷入无限循环,不允许程序退出。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多