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

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

报告相同问题?

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀