使用C中的fscanf跳过行的剩余部分

nvc*_*emp 3 c scanf

我正在阅读一个文件,在读完一个数字后,我想跳过剩下的那一行.这是一个文件的例子

2 This part should be skipped
10 and also this should be skipped
other part of the file
Run Code Online (Sandbox Code Playgroud)

目前我通过使用这个循环来解决这个问题:

char c = '\0';
while(c!='\n') fscanf(f, "%c", &c);
Run Code Online (Sandbox Code Playgroud)

然而,我想知道是否有更好的方法来做到这一点.我尝试了这个,但由于某种原因它不起作用:

fscanf(f, "%*[^\n]%*c");
Run Code Online (Sandbox Code Playgroud)

我原以为这会读到新行的所有内容然后再读新行.我不需要内容,所以我使用*运算符.但是,当我使用此命令时没有任何反应.光标未移动.

P.P*_*.P. 12

我建议你使用fgets()然后使用sscanf()来读取数字.scanf()函数容易出错,你很容易得到格式字符串错误,这似乎适用于大多数情况,并且当你发现它不能处理某些特定的输入格式时会出现意外故障.

快速搜索SO上的scanf()问题可以显示人们在使用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 */
   }
}
Run Code Online (Sandbox Code Playgroud)

你可能想改变你的阅读numline依赖于文件中的行的格式.但在你的情况下,似乎整数位于第一位或根本不存在.所以上面的工作正常.