#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为什嚒只会读取一次
- 写回答
- 好问题 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); }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 如何让企业微信机器人实现消息汇总整合
- ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
- ¥15 如何用Python爬取各高校教师公开的教育和工作经历
- ¥15 TLE9879QXA40 电机驱动
- ¥20 对于工程问题的非线性数学模型进行线性化
- ¥15 Mirare PLUS 进行密钥认证?(详解)
- ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
- ¥20 想用ollama做一个自己的AI数据库
- ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
- ¥15 请问怎么才能复现这样的图呀