使用while循环发出fgetc()c

时间:2014-12-19 10:47:42

标签: c file parsing loops fgetc

我使用fgetc()遇到了一个大问题,我无法弄明白...我尝试解析一个文本文件,一切都编译但是在执行时我得到了一个无限循环或一个段错误(Code :: blocks ),我的文本文件是这样的:{“USD_EUR”:“0.8631364”,“EUR_USD”:“1.3964719”},16个汇率变化。我试着把我所有的浮动放在率[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 = }

5 个答案:

答案 0 :(得分:5)

while(value =! EOF);应为while(value != EOF);

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

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

答案 1 :(得分:3)

while(value =! EOF)while(value != EOF)

不同

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

答案 2 :(得分:2)

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

     `while(value =! EOF);`

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

`while(value != EOF);`

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

答案 3 :(得分:0)

价值声明不正确并使其正确。

int value;

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

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

答案 4 :(得分:-1)

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