我正在尝试从C中的文件中读取此文本。假设这是文件Input.txt
This is a description which can be up to 1024 characters long
First
Second
Thrid Option This is a description for third
Fourth
我想读4个字 First , Second , Third , Fourth ,其余的将是丢弃。我有这个问题的解决方案,但我不明白为什么它的工作原理:
char string[1024];
char words[4][256];
FILE *in = fopen("Input.txt", "r");
// Catch first line
fgets(string, 1024, in);
for(int i = 0; i < 4; i++){
fscanf(in, "%255s[^\n]\n", words[i]);
fscanf(in, "%*[^\n]\n");
}
输入文件应采用特殊格式。
我非常感谢格式字符串的不同组件的解释,它们的工作原理以及整个解决方案的工作原理。
(我也无法找到有关fscanf格式如何工作的任何具体信息,如果有人可以给我参考,会很高兴)
答案 0 :(得分:2)
“以及整个解决方案的工作原理”IMO,在一般情况下,它没有。
2 '\n'
格式中的第二个fscanf(in, ...
使这成为一个弱解决方案。 '\n'
将扫描任意数量的换行符以及任何空白区域。最好继续使用fgets(string, ...)
然后sscanf(string, ...)
"%255s[^\n]\n"
在[
之后查找"%255s"
。奇怪的代码。 @John Bollinger
相反
char string[1024+1+1]; // increase for the \n and the \0
char words[4][256];
FILE *in = fopen("Input.txt", "r");
// Catch first line
// fgets(string, 1024, in);
fgets(string, sizeof string, in);
// "%255s"
// scan over yet do not save leading white-space
// scan and save up to 255 non-white-space characters.
// Append a null character to form a string
for(int i = 0; i < 4 && fgets(string, sizeof string, in); i++ ){
if (sscanf(string, "%255s", words[i]) != 1) {
words[i][0] = '\0'; // If line was all white-sapce
}
puts(words[i]);
}