新手求助。在这里,scanf为什嚒只会读取一次

#include<stdio.h>
int min(int x,int y){
    int temp;
    if (x>y)
    temp=y;
    else
    temp=x;

    return temp;
}
int max(int x,int y){
    int temp;
    if (x>y)
    temp=x;
    else
    temp=y;
    return temp;
}
int main(){
    int str[10]={0};
    int i=0;
    for(i=0;i<10;i++){
        str[i]=i;
    } 

    int t;
    scanf("%d",&t);
    int x,y;
    for(i=0;i<t;i++){

        scanf("%d %d",&x,&y);
        x=min(x,y);
        y=max(x,y);
        str[y]=str[x];

        for(i=0;i<10;i++){
            printf("%d ",str[i]);
        }
        printf("\n");

    }
    return 0;
} 

图片说明

汗~

为什么scanf为什嚒只会读取一次?

在你的代码里

 for(i=0;i<t;i++){

        scanf("%d %d",&x,&y);
        x=min(x,y);
        y=max(x,y);
        str[y]=str[x];

        for(i=0;i<10;i++){
            printf("%d ",str[i]);
        }
        printf("\n");

    }

外层的i赋值为0,进入内部循环,这时会执行scanf(),也就是你说的一次scanf(),在内部存在另一个循环当循环结束的时候此时的i位10。

而你自己输入的是t为3,即

for(i=0;i<t;i++)

此时再次判断的时候不满足条件,因此退出循环,所以最终只有一次scanf()

而且这段代码这样写也有问题,当你输入的t值大于11的时候,会导致一直循环,你可以自己验证

对了,你可以在循环的最下面加上一行代码,用来显示此时i的值

  for(i=0;i<t;i++){

        scanf("%d %d",&x,&y);
        x=min(x,y);
        y=max(x,y);
        str[y]=str[x];

        for(i=0;i<10;i++){
            printf("%d ",str[i]);
        }
        printf("\n");
                printf("%d", i);
    }

scanf("%d %d",&x,&y);
->
scanf("%d %d ",&x,&y);