C语言,数组输入遇到问题求大神指教:哪里错了,如何改正,为什么会出现这种情况?

#include<stdio.h>#include<stdlib.h>intmain(){inti,j,t,a[11];for(i=1;i<=10;i++){printf... #include<stdio.h>#include<stdlib.h>int main(){int i,j,t,a[11];for(i=1;i<=10;i++) {printf("请输入第%d个数:",i);scanf("%d\n",&a[i]);}for(i=1;i<=10;i++) for(j=i+1;j<=10;j++) if(a[i]>a[j]) {t=a[i];a[i]=a[j];a[j]=t;}for(i=1;i<=10;i++)printf("%d ",a[i]);system("pause");return 0;}
scanf函数里面加\n为什么只影响到了第一次循环
展开
 我来答
自我编程
2019-02-07 · 科技优质答主
自我编程
采纳数:1481 获赞数:4283

向TA提问 私信TA
展开全部

scanf的格式加'\n',含义特殊,不是输入一个回车,而是输入完一个数字后,必须等待一个非空格、制表符、回车的输入,程序才会继续。

所以你那样写,第一次循环输入2回车,不会进入下一次循环,而是等待再次输入,然后你输入3的时候2被存储在元素1中,进入下一个循环,已经有3了还要等待输入,于是你输入4,实际保存的是3,所以后面都错位了,结果就是最后一个输入没有被保存。

另外所有i循环都从0开始,包括冒泡排序。

修改如下:

#include<stdio.h>
#include<stdlib.h>
int main(){
    int i,j,t,a[11];
for(i=0;i<=10;i++)
{
    printf("请输入第%d个数:",i+1);
    scanf("%d",&a[i]);
}
for(i=0;i<=10;i++)
    for(j=i+1;j<=10;j++)
        if(a[i]>a[j])
            {t=a[i];a[i]=a[j];a[j]=t;}
for(i=0;i<=10;i++)
    printf("%d ",a[i]);
system("pause");return 0;
}
阿冬76
2019-02-06 · TA获得超过5028个赞
知道大有可为答主
回答量:2710
采纳率:88%
帮助的人:1086万
展开全部
对于C语言来说,数组下标从0开始,你代码中是从1开始,这样虽然并不会出错,但浪费了一个空间。真正有错误的地方是输入函数scanf中,不应该加\n,该函数会自动根据回车,空格以及tab来分隔输入的数据。
追问
那为什么scanf函数只有第一次受到影响了,\n不影响之后的循环吗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cdyzxy
2019-02-07 · TA获得超过2.1万个赞
知道大有可为答主
回答量:1.4万
采纳率:84%
帮助的人:3673万
展开全部
#include<stdio.h>
#include<stdlib.h>
int main() { int i,j,t,a[10];
  for ( i=0;i<10;i++ ) { printf("请输入第%d个数:",i+1); scanf("%d",&a[i]); }
  for ( i=0;i<10-1;i++ )
    for ( j=i+1;j<10;j++ )
      if ( a[i]>a[j] ) { t=a[i];a[i]=a[j];a[j]=t; }
  for ( i=0;i<10;i++ ) printf("%d ",a[i]); printf("\n");
  system("pause");
  return 0;
}

a[11]多定义一个a[0],虽然不用但不必非要使用下标从1开始,c语言的for语句非常适合下标从0开始的数组遍历,你只需要考虑“请输入第%d个数”时使用i+1替代i即可

以上程序有几个地方修改过

追问
为什么scanf函数只有第一次受到影响了,\n不影响之后的循环吗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
御景阁楼主
2019-02-14 · TA获得超过320个赞
知道小有建树答主
回答量:803
采纳率:100%
帮助的人:68.8万
展开全部
CSharp中数组的升序和降序排列:
Console.WriteLine("请输入6个整数按回车确认每个整数");
int[] myintArr = new int[6];
for (int i = 0; i < 6; i++) myintArr[i] = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("\n你输入的数字为:");
foreach (int outint in myintArr) Console.Write(outint + "\t");
Console.WriteLine("\n============降序排列后为:");
for(int i = 0; i < myintArr.Length - 1; i++)
{
for(int j = i + 1; j < myintArr.Length; j++)
{
int num;
if (myintArr[i] < myintArr[j])
{
num = myintArr[j];
myintArr[j] = myintArr[i];
myintArr[i] = num;
}
}
}
foreach (int outint in myintArr) Console.Write(outint + "\t");
Console.WriteLine("\n============升序排列后为:");
for (int i = 0; i < myintArr.Length - 1; i++)
{
for (int j = i + 1; j < myintArr.Length; j++)
{
int num;
if (myintArr[i] > myintArr[j])
{
num = myintArr[j];
myintArr[j] = myintArr[i];
myintArr[i] = num;
}
}
}
foreach (int outint in myintArr) Console.Write(outint + "\t");
Console.ReadKey();
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
听不清啊
高粉答主

2019-02-07 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部

#include<stdio.h>
#include<stdlib.h>
int main()
{ int i,j,t,a[11];
  for(i=1; i<=10; i++)
  { printf("请输入第%d个数:",i);
    scanf("%d",&a[i]);
  }
  for(i=1; i<10; i++)
    for(j=i+1; j<=10; j++)
      if(a[i]>a[j])
      { t=a[i];
        a[i]=a[j];
        a[j]=t;
      }
  for(i=1; i<=10; i++)
    printf("%d ",a[i]);
  system("pause");
  return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式