RLHaides 2016-11-02 12:48 采纳率: 75%
浏览 1416
已采纳

新手求助。在这里,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;
} 

图片说明

  • 写回答

2条回答 默认 最新

  • Xefvan 2016-11-02 14:30
    关注

    汗~

    为什么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);
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?