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

问题描述 投票:1回答:1

我的测试输入是

[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,则可以正常工作,但是问题是我不知道需要多少个。反正有什么办法解决,以便扫描二维坐标?

任何帮助将不胜感激

c loops while-loop scanf
1个回答
1
投票

考虑使用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");
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.