c fscanf使用和换行

时间:2017-04-30 05:08:07

标签: c scanf

我需要接收并输入变量文本文件。 例如:

/*
system_1
6
challenge_2 22 2
challenge_3 33 3
challenge_4 44 1
challenge_5 55 3
challenge_6 66 3
challenge_1 11 1
4
room_2 1 22
room_1 3 11 44 66
room_3 3 55 33 11
room_4 4 22 44 55 66
*/

我知道每个单词(不是行)不超过50个字符。 将每个单词放在适当的(int,string ...)中的简单方法是什么。 此外,我需要知道线的结束位置,因为行中的字数不是常数。 我认为fscanf是最有效的,但我不知道如何将它用于行结尾等等...... 我很想看到一个使用fscanf的例子。

提前致谢。

1 个答案:

答案 0 :(得分:-1)

效率更高,因为您不知道格式字符串使用fgets从文件返回一行,然后自己解析而不是使用scanf。

一个例子是这样的:

FILE* file = fopen("somefile.txt", "r");
char buffer[51];
while (fgets(buffer, 50, file)) {
    // Buffer now stores the line, lets see if it can be an integer.
    int possible_num = 0;
    // sscanf will return 1 if it read a possible integer from the buffer.
    if (sscanf(buffer, "%d", &possible_num) == 1) {
        // We read a number, so possible_num is now the number.
    }
    else {
        // We read a string, buffer stores the string.
    }
}

注意:如果您的字符串类似于" 10hello",则代码将返回误报,因为sscanf仍将读取10.有多种方法可以检查字符串是否是有效的整数在C中,我确信你可以在StackOverflow上找到它,但是这段代码可以为你提供一个入门的地方。