我有一个包含此内容的输入文件:
123 A 012345 ABC
我的代码是:
int main(void)
{
FILE* fin;
FILE* fout;
int l;
char d;
char pk[ASD];
char cd[BCD];
fin = fopen("a.i1", "r");
fscanf(fin, "%d %c %s %[^\n]", &l, &d, pk, cd);
fclose(fin);
fout = fopen("b.out", "w+");
fprintf(fout, "%d %c %s %s", l, d, pk, cd);
fclose(fout);
return 0;
}
我的输出是:
123 012345 ABC
(在123和012345之间的notepad ++中为NULL) 为什么" d"没有价值' A'?
如果我这样读:
fscanf(fin, "%d%c %s %[^\n]", &l, &d, pk, cd);
我明白了:
10 B 01010112345 ABBA
但我不知道为什么。
答案 0 :(得分:0)
实际上fscanf(fin,"%c",&c)
在你的情况下输入一个字符是空格(输入文件中的123后面),所以当
fscanf(fin, "%d %c %s %[^\n]", &l, &d, w, m);
执行
l contains 123,
d contains (space),
w contains "A" (next string after space)
and
m contains "012345 ABC" (because delimiter is '\n')
所以基本上
fprintf(fout, "%d %c %s %s", l, d, w, m);
将打印预期值。但我认为值不会存储在您预期的变量中。
在您可能错过打印fprintf
后检查w
声明,以便"A"
无法打印
答案 1 :(得分:-1)
测试fopen()
和fscanf()
的返回值。
fin = fopen("a.i1", "r");
if (!fin) {
perror("a.i1");
exit(EXIT_FAILURE);
}
if (fscanf(fin, "%d %c %s %[^\n]", &l, &d, pk, cd) != 4) {
fprintf(stderr, "fscanf() did not manage to assign 4 values.\n");
exit(EXIT_FAILURE);
}
fclose(fin);