我试图创建一个程序,要求用户输入他们希望打开的文件名,然后根据用户输入使用它来打开文件。
以下是我到目前为止的情况。 (请记住,这是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表示用户输入的字符长度。如何正确编码上面的代码这样它会打印我在文件中的所有数字吗?
非常感谢所有的帮助。
答案 0 :(得分:1)
要修复的错误:
文件名数组的大小。
char fileName[6];
这可以保存最多5个字符的文件名。使数组大小更大。
char fileName[200]; // Hopefully that is sufficient.
读取文件名。
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.
使用前检查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);
}