为什么我在基本文件I-O中获取数字而不是字符串?

时间:2014-09-05 23:27:34

标签: c string file-io

我正在尝试从文件中读取输入(我通常没有问题)。但是,使用下面的代码,我目前正在获得看似垃圾数据的内容。

输入文件的内容(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几乎完全没有任何问题。

解决 在原始代码中的一些错误中,程序无法在保存的驱动器上找到输入文件,即使它们都在同一个文件夹中。

2 个答案:

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