我正在阅读一个文件,在读完一个数字后,我想跳过剩下的那一行.这是一个文件的例子
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)
你可能想改变你的阅读num从line依赖于文件中的行的格式.但在你的情况下,似乎整数位于第一位或根本不存在.所以上面的工作正常.
| 归档时间: |
|
| 查看次数: |
6612 次 |
| 最近记录: |