我正在尝试读取以下格式的文件:
05874121 A 7
07894544 C 3
05655454 B 5
05879544 B 6
05763465 C 2
并将每个“单词”分配给不同的变量(dni,模型,垃圾)
此代码在Linux上运行,我使用CLion进行调试。
char *path = "file.txt";
FILE *f;
int result;
char dni[9], model[1], trash[100];
f = fopen(path, "r");
do {
result = fscanf(f, "%s %s %s", dni, model, trash);
printf("DNI: %s\n", dni);
}
while( result > 0);
fclose(f);
这应该打印第一列的值,但是当我执行程序时,输出仅为: “ DNI:” “ DNI:” “ DNI:” ...等等。
在调试时,我意识到“ dni”可以正确存储所有数字(作为字符),但是第一个元素dni [0]始终为:0'/ 000' 就像它是字符串的结尾一样。
我不知道为什么会这样。
答案 0 :(得分:0)
我在您的代码中做了2次更正:
#include <stdio.h>
int main (int argc, char ** argv) {
char *path = "file.txt";
FILE *f;
int result;
char dni[9], model[2], trash[100];
f = fopen(path, "r");
while(1) {
result = fscanf(f, "%s %s %s", dni, model, trash);
if (result < 1) break;
printf("DNI: %s model %s trash %s\n", dni, model, trash);
}
fclose(f);
return 0;
}
首先,变量model [2]在字符串的末尾必须有一个额外的字符。
然后,在“ if(result <1)break;”行。
错误可能是只有一个字符的model [1]。 dni中的\ 000可以是模型字符串的结尾。