gpt4 book ai didi

c - Scanf while 循环影响循环外的下一个 scanf

转载 作者:太空宇宙 更新时间:2023-11-04 03:09:03 27 4
gpt4 key购买 nike

我的测试输入是

[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 循环更改为三个单独的 scanfs 那么它工作正常,但问题是我不知道我需要多少个。无论如何要解决这个问题以便扫描 2d 坐标?

非常感谢任何帮助

最佳答案

考虑使用 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");
}
}

关于c - Scanf while 循环影响循环外的下一个 scanf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58462650/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com