【问题标题】:issue fgetc() c using while loop使用 while 循环发出 fgetc() c
【发布时间】:2014-12-19 10:47:41
【问题描述】:

我在使用 fgetc() 时遇到了一个大问题,我无法弄清楚...我尝试解析一个文本文件,一切都编译了,但在执行时我遇到了无限循环或段错误(代码::blocks ),我的文本文件是这样的: {"USD_EUR": "0.8631364", "EUR_USD": "1.3964719"} 有 16 种利率变化。我试着把我所有的浮动都放在 rate[16]...

FILE* file = NULL;
file = fopen(myFile, "r+");
int value,i;
float rate[16];
char* str = "";
if (file != NULL)
{
    do
    {
        value = fgetc(file);
        printf("%c \n",value);
        while(value > 48 && value < 57)
        {
            value = fgetc(file);
            strcat(str, value);
            //printf("%s \n", str);
        }
        rate[i] = atof(str);
        i++;
        str = "";
    }while(value != 125); // 125 = }

【问题讨论】:

  • 检查fopen函数后文件的状态,请将valeur改为value作为变量并正确关闭大括号。而=! 是错误的,正确的方法是!=
  • 这个不编译,第一个问题是没有使用valeur。第二个问题是价值没有定义。第三个问题是 while(value =!EOF); 这一行。不正确,因为它执行的是分配而不是比较。
  • @user3629249 ,OP 显示了他的代码有问题的部分,而不是全部。另外,如果OP可以运行程序,他/她一定已经编译了。
  • OT:(value &lt; 48 &amp;&amp; value &gt; 57) 这永远不会是真的。
  • 学习使用调试器来跟踪您的代码。

标签: c file parsing loops fgetc


【解决方案1】:

while(value =! EOF); 应该是while(value != EOF);

这是一个很大的不同。第一种情况是对变量值的赋值,第二种情况是查看值是否不等于 EOF。

EOF 是一个宏,通常具有值-1,这意味着!EOF 变为0。因为你有一个do{} while(),它会运行一次,但不会更多,因为条件为假。

【讨论】:

  • 非常感谢!我不明白为什么这种错误会通过编译器...
  • @mel 如果你使用gcc 添加你可以使用-Wall -Wextra -Werror,第一个启用许多警告,接下来是更多,最后一个将警告视为错误,这意味着你得到编译时错误。
【解决方案2】:

while(value =! EOF)while(value != EOF) 不同

你需要的是后者while(value != EOF)

【讨论】:

    【解决方案3】:

    在 while 循环中,您将值分配给变量值。

         `while(value =! EOF);`
    

    EOF 的值为 -1。(即)文件结束。如果是 !-1,则取 0。 因为它是只执行一次循环的do while,所以下一次条件将为假。所以它只有一个字符。 你可以使用

    `while(value != EOF);`
    

    表示不等于EOF。然后条件为真,循环一直执行,直到条件变为假。

    【讨论】:

      【解决方案4】:

      价值声明不正确,请改正。

      int value;

      ( value != EOF ) 将值与 EOF 进行比较。这里 EOF 是一个具有 值为-1。将值与此进行比较。编译时使用 cc -E 可以看到。

      (value =!EOF) 表示value =! (-1) 所以!(-1) 为零。这将分配给变量值。所以在条件零是错误的。所以它从循环中出来。您可以通过打印该变量来检查变量值的值。

      【讨论】:

        【解决方案5】:
        The following code does the job of reading/echoing a input file
        char by char.
        
        #include <stdio.h>
        #include <stdlib.h>
        
        char *theFile = "input.txt";
        
        int main()
        {
            FILE* file = NULL;
            int value;
        
            if( NULL == ( file = fopen(theFile, "r") ) )
            { // then fopen failed
                perror( "fopen failed" );
                exit(EXIT_FAILURE );
            }
        
            // implied else, fopen successful
        
            while( EOF != (value = fgetc(file) ) )
            {
                printf("%c \n",value);
            } // end while
        
            return(0);
        } // end function: main
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-18
          • 2015-06-29
          • 2019-08-03
          • 1970-01-01
          • 2023-04-09
          相关资源
          最近更新 更多