我在读一个文件,在读了一个数字之后,我想跳到这行的剩余部分。文件的一个例子是

2 This part should be skipped
10 and also this should be skipped
other part of the file

现在我用这个循环来解决这个问题:
char c = '\0';
while(c!='\n') fscanf(f, "%c", &c);

不过,我想知道是否没有更好的方法来做这件事。我试过了,但由于某种原因它不起作用:
fscanf(f, "%*[^\n]%*c");

我本以为这会把所有的东西都读到新行,然后也读到新行。我不需要内容,所以我使用*运算符。但是,当我使用这个命令时什么也不会发生。光标不移动。

最佳答案

我建议你用fgets()然后sscanf()来读这个数字。scanf()函数很容易出错,您可以很容易地将格式字符串弄错,这在大多数情况下可能有效,但在某些情况下,当您发现它无法处理某些特定的输入格式时,可能会意外失败。
快速搜索scanf() problems将显示人们在使用scanf()时出错和遇到问题的频率。
相反,fgets()+sscanf()会给你更好的控制,你知道你确实读过一行,你可以处理你读过的那行来读取整数:

char line[1024];


while(fgets(line, sizeof line, fp) ) {

   if( sscanf(line, "%d", &num) == 1 )
   {
    /* number found at the beginning */
   }
   else
   {
    /* Any message you want to show if number not found and
     move on the next line */
   }
}

您可能需要根据文件中行的格式更改从num读取line的方式。但在你的例子中,整数可能是一开始就被定位了,或者根本就不存在。所以上面的方法就行了。

关于c - 跳过C中fscanf的其余部分,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40009690/

10-12 14:52