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

作者&投稿:荀选 (若有异议请与网页底部的电邮联系)
C语言字符数组,输入输出字符串格式。(请各位大神指教)~

%s表示输出一个字符串,给出的字符指针变量名是str,那么系统先输出它所指向的第一个字符数据,然后自动使str加1,使之指向下一个字符,然后再输出一个字符。。。。如此直到遇到结束标志‘\0’为止(\0是最后被自动加上的,因此能够在输出时确定字符串的终止位置)~

程序已经完成了指定的任务:

只是排序部分没有使用指定的“选择法”排序,下面已作改正,并对输出部分语句作了改动:
#include
void sort(int *a,int n);
int main()
{
int n,i;
scanf("%d",&n);
int a[n],b,c=1,d=0;
while(c==1){
scanf("%d",&b);
int a[b];
for(i=0;i<b;i++){
scanf("%d",&a[i]);
}
sort(a,b);
d=d+1;
if(d==n){
c=0;
}
}
}
void sort(int *a,int n)
{
int i,j,temp,k;
for(i=0;i<n-1;i++){
k=i;
for(j=i+1;j<n;j++)
if(a[j]<a[k])k=j;
temp=a[i];
a[i]=a[k];
a[k]=temp;
}
printf("After sorted: ");
for(i=0;i<n-1;i++)
printf("%d ",a[i]);
printf("%d
",a[i]);
}

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

所以你那样写,第一次循环输入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;
}


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

#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("
");
  system("pause");
  return 0;
}

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

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



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();

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



C语言,从键盘为一个3*3整形数组输入数据,并找出主对角线上元素的最...
思路:键盘输入3*3的二维数组a,接着假设a[0][0]就是最大值,再把a[0][0]与a[1][1]和a[2][2]比较最后输出最大值和最大值行号。参考代码:include<stdio.h>#define n 3int main() { int a[n][n],i,j,max,maxi; for(i=0;i<n;i++)\/\/键盘输入 for(j=0;j<n;j++) ...

C语言,只要是字符串,就算是保存到数组中,一旦遇到\\0就表示输入结束?
'\\0' 为字符串的结束符,选C。

c语言编程题:输入10个数存放在一个数组中,输入一个数存入x中,然后找出...
假定是 int 型,程序如下:include <stdio.h> int main(){ int y[10],x,i;printf("input 10 int data\\n");for (i=0;i<10;i++) scanf("%d",&y[i]);printf("input x \\n");scanf("%d",&x);printf("locations:\\n");for (i=0;i<10;i++) if (y[i]==x)printf("%d ...

c语言问题,有一个已排好序的数组,现输入一个数,要求按原排序的规律将它...
本程序首先对数组a中的10个数从大到小排序并输出排序结果。然后输入要插入的整数n。再用一个for语句把n和数组元素逐个比较,如果发现有n>a[i]时,则由一个内循环把i以下各元素值顺次后移一个单元。后移应从后向前进行(从a[9]开始到a[i]为止)。 后移结束跳出外循环。插入点为i,把n赋予a[i...

C语言中数组输入的值个数不够声明的个数无法进行
int main(){ int *a;\/\/使用指针代理数组 int i;int b;\/\/用来确定数组的大小 printf("\\n请设置数组的大小:");scanf("%d",&b);a=(int *)malloc(sizeof(int)*(b+1));\/\/确定数组的大小并把数组的首地址传给指针 for(i=0;i<b;i++)scanf("%d",&a[i]);printf("输入数组为:")...

C语言 数组 输入12345 输出1122334455
前面加函数:void doublenumber(char *s){ int i,L;char ss[160];L=strlen(s);for (i=0;i<L;i++) { ss[i*2]=s[i];ss[i*2+1]=s[i];};ss[L*2]='\\0';strcpy(s,ss);}

C语言程序编写:在有序的数列中查找某数,若该数在此数列中,则输出它所...
之前写过一个程序类似的,你可以用作参考:题目:试编写一个程序完成:有15个数按从下到大的顺序存放在一个数组中.输入一个数,要求折半查找法找出该数是数组中第几个元素的值.如果该数不在数组中,输出“不在表。===下面是C代码,其中数组没有设计为录入,而是固定数组=== \/\/输出的序列是...

学生来看这8道C语言谜题你能答对几个
C语言8个语言谜题答对几个 1、下面的程序并不见得会输出"hello-std-out"你知道为什么吗? 参考答案:stdout和stderr是不同设备描述符。stdout是块设备,stderr则不是。对于块设备,只有当下面几种情况下才会被输入:遇到回车; 缓冲区满;flush被调用。而stderr则不会。 2、下面的程序看起来是正常的,使用了一个逗号...

C语言 输入前k大的数 给定一个数组,数组长度小于1000,统计前k大的数并...
include <stdio.h> main(){int n,k,i,j,temp;int a[1000];printf("输入n:");scanf("%d",&n);printf("输入n个数:"); for (i=0;i<n;i++)scanf("%d",&a[i]);printf("输入k:");scanf("%d",&k);for(i=0;i<k;i++)for(j=0;j<n-i-1;j++)if (a[...

c语言问题…如何输入一组个数未知的数组?如图我在主函数里这样循环提取...
每次循环, 你的 getchar() 要读去一个字符。如果这个字符 不是 '\\n', 你需要把它 “还” 回来,否则 scanf( ..) 时 少了 一个 字符,若少的是空白符,则没有影响,若少了数字,就有影响。通常,可以用:int c;while(1){ c = getc (stdin); \/\/ 读一个字符 if (c == '...

边坝县17868961310: C语言数组输入问题 -
莫烁巨和: #include#include#include int nocharacter(char s[]); int str2int(char s[]); void main() { char s[10]; int a[5],i=0,t; while(1) { scanf("%s",s); t=nocharacter(s); if(t) { a[i]=str2int(s); i++; puts(s); } if(i==5) break; } for(i=0;i printf("%d\n",a[i]); } int nocharacter(...

边坝县17868961310: C语言简单一维数组输入输出出现了一个问题 -
莫烁巨和: #include <stdio.h>#define num 4 //这里多了一个分号 void main () { int i; int code[]={1,3,4,5}; int code2[num]; printf("请输入数组2:");//这里差一个分号 for(i=0;i<num;i++) scanf("%d",&code2[i]); printf("数组1的数字有:"); for(i=0;i<=num;i++) printf("%d ",code[i]); printf("\n"); printf("数组2的数字有:"); for(i=0;i<=num;i++) printf("%d ",code2[i]); }

边坝县17868961310: c语言中输入数据到数组中,求大神请教 -
莫烁巨和: #include<stdio.h> int main(void) { char ca[30] = ""; int a[30] = {0}; printf("输入身份证号\n"); scanf("%s",ca); int i = 0; while(ca[i] != '\0') { a[i] = ca[i] -'0'; i++; } return 0; } a中存放的就是你需要的数据.如果不能满足,欢迎追问.

边坝县17868961310: C语言数组输入输出问题 -
莫烁巨和: 输入好几个字符串? 首先,要看你的scanf();函数的输入格式是什么,要按照格式输入,回车键相当于结束输入.要用逗号或者空格隔开,由你的输入函数scanf()格式决定.如:一维数组:a[] scanf("%d %d %d”,a,a,a)输入应该用空格隔开.scanf("%d,%d,%d",a,a,a)输入应该用逗号隔开.打字好累啊

边坝县17868961310: C语言的数组插入问题 -
莫烁巨和: for (y = length - 1; y > temp; y--) // y 应该初始化为 length - 1 arr[y] = arr[y - 1];

边坝县17868961310: c语言.自定义函数 输入二维数组 有问题求解答 -
莫烁巨和: 问题在注释里指出来了,看下面代码:#include<stdio.h>#define N 5 void Input(int str[N][N])//指明长度 { int i,j;//加逗号 for(i=0;i<N;i++)//最后个分号是多余的 for(j=0;j<N;j++)//最后个分号是多余的 scanf("%d",&str[i][j]); } void main() { int str1[N][N]; Input(str1); }

边坝县17868961310: c语言数组输入问题,急急急急!!!sos -
莫烁巨和: scanf是输入的东西 碰到空格 或者回车 就停止输入了

边坝县17868961310: C语言数组问题~~求高手【【详解】】~~~多谢~! -
莫烁巨和: 1、 printf("%d",*(p++)); 语句输出的是2 printf("%d\n",++k); 语句输出的是 p指针的地址+sizeof(int)2、答案是C 当输入完三行时,c[N]里的数据分别是:{a,<CR>,b,<CR>,c,d}6个数据.3、答案是D.(*cp)[5]是指向数组的指针,意思是这个数组有5个数据都是指针,cp=c后这5个指针分别存放二维数组c[4][5]的每行的首地址的指针.所以cp是指针的指针.*cp是指针指向c[0][0],*cp+2是指针偏移 指向c[0][2],*(*cp+2)是c[0][2]的值,所以只有它能引用数组的元素.

边坝县17868961310: C语言,int 数组输入的问题 -
莫烁巨和: 可以的阿,你只管在一行中输入,用空格隔开,完了再回车;如果不足的话,那么程序会等待你继续输入的;如果多了,也就费了

边坝县17868961310: c语言矩阵数组输入,求指教,怎么判断结束 -
莫烁巨和: int** array=(int**)(malloc(sizeof(int*)*m) ; for(i=1;i<=m;i++) array[i]=(int*)malloc(sizeof(int*));

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网