可编制代码 `
#include <stdio.h>
#include <stdlib.h>
FILE * openFile(int argc, char *argv[]);
int readMonth(FILE *fin);
int main(int argc, char *argv[])
{
int month, choice;
int * temps;
FILE * fin = NULL;
fin = openFile(argc, argv);
month = readMonth(fin);
}
FILE * openFile(int argc, char *argv[])
{
int test;
FILE * fin = NULL;
fin = fopen(argv[2], "r");
fscanf(fin, "%d", &test);
if(fin==NULL){
perror("fopen");
exit(1);}
return fin;
}
int readMonth(FILE *fin)
{
int month=0;
int n = fscanf(fin, "%d", &month);
if(n!=1)
{printf("error reading month from file\n");
exit(1);}
printf("%d\n", month);
return month;
}`
我正在尝试从文本文件中读取数据,而且我得到了奇怪的结果。
我从main调用fileOpen返回文件指针,这是我的函数:
FILE * fileOpen(int argc, char *argv[])
{
FILE* fin = NULL;
fin = fopen(*argv, argc);
return fin;
}
然后调用readMonth来读取文件的第一行,它打印不正确 中间体
int readMonth(FILE *fin)
{
int month=0;
fscanf(fin, "%d", &month);
printf("%d", month);
return month;
}
我不确定错误是文件打开还是读取文件。
答案 0 :(得分:0)
您可以使用功能fgets
readmonth
来阅读文件的第一行
char buffer[1024];
char *l ;
if((l=fgets(buffer,sizeof(buffer),fin))!=NULL)
printf("%d",atoi(l));
此外,您可以使用
检查文件打开是否失败 if(fin == NULL)
printf("failed");
答案 1 :(得分:0)
以下是一些建议。 1.检查fopen的返回值
FILE *fileOpen(int argc, char *argv[] {
FILE* fin = NULL;
fin = fopen(*argv, "r");
if(fin == NULL) { // this block is new
perror("fopen");
exit(1);
}
return fin;
}
注意:如果argc
和argv
来自main,那么*argv
是argv[0]
,这是该计划的名称。你可能想要argv[1]
。您应该检查argc >= 2
中的main
。
2:检查fscanf的返回值:
int readMonth(FILE *fin)
{
int month=0;
int n = fscanf(fin, "%d", &month);
if(n != 1) { // this block is new
printf("error reading month from file\n");
exit(1);
}
printf("%d", month);
return month;
}
通过这两项更改,您的代码应该能够正常运行。
答案 2 :(得分:0)
FILE * file = fopen(data, "r");
if(file==NULL){
printf("404 File Not Found\n");
exit(-1);
}
while(1)
{
char line[100];
int res = fscanf(file, "%s", line);
if(res == EOF)
break;
fscanf(file, "%s", &var);
// handle the var
}