0

我已经为此苦苦挣扎了很长时间,试图弄清楚,我猜这是一个非常愚蠢的菜鸟错误,但我无法弄清楚。

所以我试图从一个文件中读取一个整数,然后在其中做一些操作,为了这个问题,我只是想在这里输出它:

FILE * pFile;
int number;
pFile = fopen ("myfile.txt","r");
if (pFile!=NULL) {
fscanf(pFile, "%d", number);
fclose (pFile);
}
printf("number: %i", number);
return 0;

myfile.txt 的内容:

123

但是当我运行它时,它什么也没读,而是说

RUN FAILED (exit value 1, total time: 32ms)

感谢您的任何帮助

编辑:我忘了提,它作为一个字符串工作,它读取正确的数字,但我不能对其进行任何操作,如果我将数字类型设置为加倍它也可以工作,但会输出数百万的随机数。 ..

4

4 回答 4

4

您需要将 int 变量的地址传递给 fscanf

fscanf(pFile, "%d", &number);
于 2012-10-17T23:07:59.430 回答
1

你需要一个指向数字的指针

IE

fscanf(pFile, "%d", &number);

检查返回值是个好主意fscanf

您可能还需要进行冲洗。

即在 printf 之后添加该行

fflush(stdout);

此外,如果您无法打开文件,您需要进行初始化number或执行操作。return

所以总而言之,代码应该是这样的

FILE * pFile;
int number;
pFile = fopen ("myfile.txt","r");

if (NULL == pFile && 1 == fscanf(pFile, "%d", &number))
{
    printf("Number: %i", number);
    fflush(stdout);
    return 0;
}
else
{
    return -1;
}
于 2012-10-17T23:16:50.517 回答
0

您忘记将数字的地址而不是数字的值传递给 fscanf。所以更换

fscanf(pFile, "%d", number); 

fscanf(pFile, "%d", &number);

有必要将地址/指针传递给它,否则它无法修改数字的内容。

于 2012-10-17T23:11:29.150 回答
-1

永远不要忘记,对于输入(来自键盘/文件),您需要提及变量的地址。所以你必须把&变量放在前面。

在你的情况下:

fscanf(pFile, "%d", &number);

此外,您最好检查您是否到达文件结尾:

while(fscanf(pFile, "%d", &number) != EOF){
    //do the logic
}

查看这些手册了解更多信息:

Linux 程序员手册

C 库函数 - fscanf()

于 2019-05-19T11:07:25.723 回答