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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言,数组输入遇到问题求大神指教:哪里错了,如何改正,为啥会出现这种情况?相关的知识,希望对你有一定的参考价值。

#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为什么只影响到了第一次循环

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;

参考技术A 对于C语言来说,数组下标从0开始,你代码中是从1开始,这样虽然并不会出错,但浪费了一个空间。真正有错误的地方是输入函数scanf中,不应该加\n,该函数会自动根据回车,空格以及tab来分隔输入的数据。追问

那为什么scanf函数只有第一次受到影响了,\n不影响之后的循环吗

参考技术B #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不影响之后的循环吗

参考技术C 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();
参考技术D

#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;

我用JQuery miniui 做了一个表格,求大神指教一个下拉框问题

上方三个必选条件(input),input的下拉框内容是从数据库里拿出来的,要求是在输入框里输入达到模糊查询(我已完成),但是如果输入了下拉框里没有的数字或字母,下拉框还是会显示一个空白的下拉框
请问大神是否有什么办法当输入不存在的东西模糊查询后,别让input出现那个空白的下拉框,请详述,万分感谢

参考技术A 用input和datalist标签共同完成,可以进行模糊查询,并达到你说的没有模糊下拉框的效果
<input id="myCar" list="cars" />
<datalist id="cars">
<option value="BMW">
<option value="Ford">
<option value="Volvo">
</datalist>追问

如果有另一种情况:如果输入的是已存在于数据库的内容,则允许执行下一步,但input框有一种缺陷,输入不存在于数据库的内容后,会出现一个没有内容的空白下拉框,一旦用户点了这个空白下拉框,input框内的内容就不会被检查,请问大神,有没有什么办法可以让输入的内容不是数据库里的内容时别出现空白的下拉框么?只要别出现就好

追答

既然是下拉框,那肯定是先从数据库中读取数据,你遍历获取到的数据到option输出,然后模糊查找的时候就不用再次查找数据库了呀,datalist带有模糊查询功能,直接在输入框中输入内容,不存在什么都不会显示的


这是上面给你例子的截图,并没有空白下拉框

以上是关于C语言,数组输入遇到问题求大神指教:哪里错了,如何改正,为啥会出现这种情况?的主要内容,如果未能解决你的问题,请参考以下文章

c语言中求交集的一个函数,不知道哪里错了,求高手解答。。。

急求助,C语言,计算两个日期之间的天数,不知道我的算法到底哪里错了,运行结果是错误的,求大神帮忙看看

急急急!!!用vhdl语言写一个计数器程序 下面的错误不知道哪里错了求指教

求大神帮忙看看c语言编程哪里出问题了,文件始终是空白,无法写入。

在C语言中如何区分数组中的空格,并提取数组单个字符!求大神讲解!

C语言分解质因数