c - 使用 fscanf 从文件中读取一个整数

标签 c

海湾合作委员会 4.4.4 c89

我有以下包含姓名、年龄和性别的文件。我正在努力读书的年龄。

"Bloggs, Joe" 34 M

我可以成功打开文件:

fp = fopen("input.txt", "r");
if(fp == NULL) {
    fprintf(stderr, "Failed to open file [ %s ]\n", strerror(errno));
    return 1;
}

我试着在 34 岁时阅读。

int age = 0;
int result = 0;
result = fscanf(fp, "%d", &age);

但是,当我尝试打印结果时,年龄和结果总是为零。

非常感谢您的任何建议,

最佳答案

您没有做任何事情来跳过名称,所以它正在查看该文本,试图将其转换为 int 并失败,因此返回值为 0(0 次转换成功)和变量中的值保持不变。您需要添加代码以跳过名称,然后读取年龄:

fscanf(fp, "%*c%*[^\"]\" %d", &age);

初始 "%c" 读取初始引用。 "%[^\"]\" 读取字符直到(并包括)下一个引号。在这两种情况下,“*”表示将读取该值但不会存储在任何地方。之后, 我们可以使用 "%d"读取数字。

关于c - 使用 fscanf 从文件中读取一个整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3373556/

相关文章:

c - 如何禁止sprintf()警告 'directive writing between 1 and 11 bytes into a region of size 6 '

c - C 中的 Printf 函数在 while 循环完成之前不打印

c++ - 用于 C++ 环境的 visual studio 插件

c - 如何用if函数打开3个文件

c - 如何在原始输入模式下发送终端转义序列?

c - 使用 C 函数 fopen、fread 和 fwrite 与串行端口交互?

c - 通过 EOF 中断 while 循环

C 代码给出不同的输出

c - strncat 导致缓冲区溢出

clock() 函数无法按预期使用排序函数