我试图给出以下形式的程序输入:
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_coord
和type
是否初始化正确,以便分配工作?
同样,scanf()
将返回成功扫描的元素数。您可以使用它进行额外的错误检查。
在任何情况下,如果输入格式良好,则可以使用以下格式字符串:
scanf("%d %d %s%*[^n]%*c",&x_coord,&y_coord,type)
解析完前三个参数后,这将丢弃所有不是换行符的字符,然后丢弃换行符本身。
使用scanf()
很容易出错,因为格式不好的输入可能导致扫描阻塞或意外错误,因为输入的意外部分被错误地解释。对于行分隔的输入,最好先用fgets()
读取整行,然后用sscanf()
解析该行。