C语言 如何让scanf忽略输入文件中的多余文本



我试图给出以下形式的程序输入:

11 22 @3
30 2  @^
1  4  @B    asdfghj
然而,有几行(如最后一行)有额外的文本。我试图让程序忽略它们,但无济于事。下面是我当前的代码:
int x_coord;
int y_coord;
char type[3];
do(grid[y_coord][x_coord]=type[1]);
while(scanf("%d %d %s",&x_coord,&y_coord,type)!=EOF);{
for(i=1; i<=30;i++){
 for(j=1; j<=30;j++){
   printf("%c",grid[i][j]);
 }
  printf("n");
 }
 }

我已经尝试添加一个额外的参数%*s到scanf来尝试捕获任何额外的文本,但是我无法让它运行。

有没有人对如何处理输入文件中的额外文本有任何建议?

你的循环看起来很奇怪。

do(grid[y_coord][x_coord]=type[1]);
while(scanf("%d %d %s",&x_coord,&y_coord,type)!=EOF);

y_coord, x_coordtype是否初始化正确,以便分配工作?

同样,scanf()将返回成功扫描的元素数。您可以使用它进行额外的错误检查。

在任何情况下,如果输入格式良好,则可以使用以下格式字符串:

scanf("%d %d %s%*[^n]%*c",&x_coord,&y_coord,type)

解析完前三个参数后,这将丢弃所有不是换行符的字符,然后丢弃换行符本身。

使用scanf()很容易出错,因为格式不好的输入可能导致扫描阻塞或意外错误,因为输入的意外部分被错误地解释。对于行分隔的输入,最好先用fgets()读取整行,然后用sscanf()解析该行。

相关内容

  • 没有找到相关文章

最新更新