如何在C中正确使用fopen命令?

时间:2015-02-18 02:58:27

标签: c

我试图创建一个程序,要求用户输入他们希望打开的文件名,然后根据用户输入使用它来打开文件。

以下是我到目前为止的情况。 (请记住,这是C语言的介绍):

#include <stdio.h>
int
main (void)

{
FILE *data_File;
char fileName[6];
int ecoli_lvl;
printf ("Which month would you like a summary of? \nType month followed by date (i.e: july05): ");
scanf ("%lf", &fileName);
data_File = fopen (fileName, "r");
fscanf (data_File, "%d", &ecoli_lvl);
printf ("%d", ecoli_lvl);
return (0);
}

文本文件中的数据全部如下所示:

1 101 5 66.6 33.3 22.2 98.9 11.1

5 501 2 33.3 44.3

然而程序打印的内容取决于我放在char fileName [x]的方括号中的数字(我认为x表示用户输入的字符长度。如何正确编码上面的代码这样它会打印我在文件中的所有数字吗?

非常感谢所有的帮助。

2 个答案:

答案 0 :(得分:1)

要修复的错误:

  1. 文件名数组的大小。

    char fileName[6];
    

    这可以保存最多5个字符的文件名。使数组大小更大。

    char fileName[200]; // Hopefully that is sufficient.
    
  2. 读取文件名。

    scanf ("%lf", &fileName);
    

    %lf是用于读取字符串的错误格式。此外,您不需要&fileName。只需fileName即可使用。

    scanf ("%199s", fileName);  // Make sure that format also
                                // specifies the maximum number
                                // of characters that should be read
                                // in to fileName.
    
  3. 使用前检查fopen的返回值。

    data_File = fopen (fileName, "r");
    if ( data_File != NULL )
    {
       fscanf (data_File, "%d", &ecoli_lvl);
    }
    

答案 1 :(得分:0)

您的数据看起来像我的浮点输入:

#include <stdio.h>

int main()
{
  FILE  *data_File;
  char   fileName[256] = { 0 };
  double ecoli_lvl;

  while (1)
  {
    printf("Of which month would you like a summary?\nType month followed by date (i.e: july05): ");
    fflush(stdout);

    scanf("%255s", fileName);

    if (NULL != (data_File = fopen(fileName, "r")))
      break;

    perror("Couldn't open file!");
  }

  while (1 == fscanf(data_File, "%lf", &ecoli_lvl))
    printf("%lf ", ecoli_lvl);

  printf("\n");
  fclose(data_File);

  return (0);
}