我正在尝试从文件中读取输入(我通常没有问题)。但是,使用下面的代码,我目前正在获得看似垃圾数据的内容。
输入文件的内容(elections.txt):
Megan Mann
Sponge Bob
Squid Ward
该计划:
int main(void)
{
FILE *fp = fopen ("elections.txt", "r");
char f_name[20], l_name[20];
fscanf (fp, "%s", f_name);
printf ("%s", f_name);
fclose(fp);
return 0;
}
我每次都得到的输出:
0
我以某种方式取消引用我的指针,还是问题更复杂?我已经完成了文件I-O几乎完全没有任何问题。
解决 在原始代码中的一些错误中,程序无法在保存的驱动器上找到输入文件,即使它们都在同一个文件夹中。
答案 0 :(得分:3)
您的fscanf
失败并且什么也没读,因为您从未成功打开过您的文件。 R
无效的文件模式。 r
是您必须使用的fopen
。通常,通过测试fopen
为空来检查fp
是否成功。
此外,%s
中的fscanf
格式说明符需要char *
个参数。您正在通过&f_name
,即char (*)[20]
。这是不正确的指针类型。通过f_name
,而不是&fname
。
在修复R
问题,%S
问题并从&
参数中移除fscanf
后,我能够在我的实验中完美地运行您的程序。它从文件中读取名称并正确打印出来。
答案 1 :(得分:1)
有一些问题:
1。 fopen
的第二个参数应该是小写的(没有很多你应该在C中大写)。将其更改为
fopen("elections.txt", "r");
2。 fscanf
通常将指针作为参数,除之外的字符串。因为它们是字符数组,所以地址在没有&
的情况下传递给fscanf。此外,两个%s
说明符都应该是小写的。将其更改为:
fscanf(fp, "%s %s", f_name, l_name);