【发布时间】:2023-03-17 08:50:01
【问题描述】:
我正在使用fscanf 接受特定格式的输入。我要阅读的行是:
A B C D E F G H I J K x
我的fscanf 代码如下:
fscanf(circuit, "%s %s %s %s %s %s %s %s %s %s %s %c ",
str1, str2, str3, str4, str5, str6, str7, str8, str9, str10, str11, &a);
在本例中,“电路”是文件的名称。出于某种原因,"K" 和 'x' 被正确读取(分别为 str11 和 a),但其余字符无法正确读取。我选择字符串标识符而不是字符标识符的原因是因为该行可能包含单个数字整数。在整数的情况下,我只是在稍后的代码块中将字符串转换为整数。为什么这不能正常工作?
【问题讨论】:
-
你能把所有 %s 之间的空格去掉再试一次吗?
-
是
str1, str2等都指向同一个缓冲区吗? -
问题好像是char数组,试试str1[2]
-
如果不查看程序的其余部分,很难说出问题所在。请发帖Minimal, Complete, and Verifiable example。
-
你真的,真的需要显示字符串的定义。例如,如果你有
char str1[1];等,你会遇到问题。格式字符串中的尾随空格很危险。它将读取所有空格(空格、制表符、换行符——尤其是换行符!)直到下一个非空格字符(将留在输入中以供进一步处理)或 EOF。如果此数据来自文件,通常情况下还不错。如果数据来自终端,这将非常糟糕。如果输入来自管道或套接字,它也经常造成严重破坏。