C - 打开并从文件中读取

时间:2013-11-16 04:06:39

标签: c

可编制代码     `

#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;
}

我不确定错误是文件打开还是读取文件。

3 个答案:

答案 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;
}

注意:如果argcargv来自main,那么*argvargv[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
 }