我的测试输入是
[1,2,3]
[4,5,6]
[7,8,9]
[9,9]
或者它可以是单个2d坐标之前的任意数量的3d坐标,我的代码是
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <ctype.h>
#include <string.h>
int main(){
int x1;
int y1;
int z1;
int x2;
int y2;
while(scanf("[%d,%d,%d]\n", &x1,&y1,&z1) == 3){
printf("(x,y,z) ---> (%d,%d,%d)\n", x1,y1,z1);
}
scanf("[%d,%d]", &x2, &y2);
printf("(%d,%d)\n", x2, y2);
return 0;
}
如果将while循环更改为三个单独的scanf,则可以正常工作,但是问题是我不知道需要多少个。反正有什么办法解决,以便扫描二维坐标?
任何帮助将不胜感激
考虑使用fgets
捕获输入。 sscanf
是解析输入的一种方法。优点是输入可以被解析多次,并且输入流可以清除到尾随的换行符。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ( void){
char line[256] = "";
int x1;
int y1;
int z1;
int x2;
int y2;
while( fgets ( line, sizeof line, stdin)) {
if ( 3 == sscanf ( line, "[%d,%d,%d]", &x1, &y1, &z1)) {
printf ( "(x,y,z) ---> (%d,%d,%d)\n", x1,y1,z1);
}
else if ( 2 == sscanf ( line, "[%d,%d]", &x2, &y2)) {
printf ( "(x,y) ---> (%d,%d)\n", x2, y2);
break;//exit the while loop
}
else {
printf ( "input coordinates [x,y,z] or [x,y]\n");
printf ( "try again\n");
}
}