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

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

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!