读书人

关于C语言程序中隐秘的异常

发布时间: 2012-05-27 05:42:30 作者: rapoo

关于C语言程序中隐秘的错误!
一个错误程序
# define N 51
# define H 123
# include<stdio.h>
void main()
{
int sum(int b[],int n);
int a[N],b[N],c[N],e[N],i,j,m,h,k,l,p,s,n1,n2,count;
i=1;
l=1;
count=0;
while(1)
{
printf("输入退出密码:");
if(scanf("%d",&k)==H)
{
printf("退出!");
break;
}
else
{
printf("不退出继续!\n");
printf("输入学号:\n");
for(j=1;j<N-1||j==N-1;j++)
{
scanf("%d",&a[j]);
}
s=sum(a,N-1);
if(s==1)
{
printf("输入学号重复有误!\n");
break;
}
printf("显示学生学号:\n");
for(j=1;j<N-1||j==N-1;j++)
printf("学号%d)是%d",j,a[j]);
printf("\n");
printf("输入学生成绩:\n");
for(j=1;j<N-1||j==N-1;j++)
{
scanf("%d",&b[j]);
}
printf("显示学生成绩:\n");
for(j=1;j<N-1||j==N-1;j++)
printf("第%d个成绩是%d",j,b[j]);
for(m=1;m<N-1||m==N-1;m++)
{
if(b[m]>80||b[m]==80)
{
c[i++]=b[m];
e[l++]=a[m];
count++;
}
}
if(count==0)
printf("输入成绩都没有达到80!\n");
else
{
for(h=1;h<count||h==count;h++)
printf("学号是%d学生成绩是%d",e[h],c[h]);
}
printf("\n");
printf("原学号输入:");
scanf("%d",&p);
for(j=1;j<N-1||j==N-1;j++)
{
if(a[j]==p)
printf("成绩是%d",b[j]);
}
n1=b[j];
switch(n1/10)
{
case 10: printf("成绩等级是A");break;
case 9: printf("成绩等级是B");break;
case 8: printf("成绩等级是C");break;
case 7: printf("成绩等级是D");break;
case 6: printf("成绩等级是E");break;
case 5: printf("成绩等级是F");break;
case 4: printf("成绩等级是G");break;
case 3: printf("成绩等级是H");break;
case 2: printf("成绩等级是I");break;
case 1: printf("成绩等级是J");break;
case 0: printf("成绩等级是K");break;
}
printf("\n");
printf("成绩大于等于80的学生的学号输入:");
scanf("%d",&p);
for(j=1;j<l;j++)
{
if(e[j]==p)
printf("成绩是%d",c[j]);
}
n2=c[j];
switch(n2/10)
{
case 10: printf("成绩等级是A");break;
case 9: printf("成绩等级是B");break;
case 8: printf("成绩等级是C");break;
}
}
}
int sum(int b[],int n)
{
int i,j,k,s;
s=0;
for(i=1;i<n;i++)
{
k=i;
for(j=i+1;j<n||j==n;j++)
{
if(b[j]==b[k])
{
s++;
if(s==1)


break;
}
}
if(s==1)
break;
}
return s;
}
请问错在何方?

[解决办法]

C/C++ code
# include<stdio.h># define N 51# define H 123int sum(int b[],int n);void main(){       int sum(int b[],int n);    int a[N],b[N],c[N],e[N],i,j,m,h,k,l,p,s,n1,n2,count;    i=1;    l=1;    count=0;    while(1)    {           printf("输入退出密码:");        if(scanf("%d",&k)==H)        {               printf("退出!");            break;        }        else        {               printf("不退出继续!\n");            printf("输入学号:\n");            for(j=1;j<N-1||j==N-1;j++)            {                   scanf("%d",&a[j]);            }            s=sum(a,N-1);            if(s==1)            {                   printf("输入学号重复有误!\n");                break;            }            printf("显示学生学号:\n");            for(j=1;j<N-1||j==N-1;j++)                printf("学号%d)是%d",j,a[j]);            printf("\n");            printf("输入学生成绩:\n");            for(j=1;j<N-1||j==N-1;j++)            {                   scanf("%d",&b[j]);            }            printf("显示学生成绩:\n");            for(j=1;j<N-1||j==N-1;j++)                printf("第%d个成绩是%d",j,b[j]);            for(m=1;m<N-1||m==N-1;m++)            {                   if(b[m]>80||b[m]==80)                {                       c[i++]=b[m];                    e[l++]=a[m];                    count++;                }            }            if(count==0)                printf("输入成绩都没有达到80!\n");            else            {                   for(h=1;h<count||h==count;h++)                    printf("学号是%d学生成绩是%d",e[h],c[h]);            }            printf("\n");            printf("原学号输入:");            scanf("%d",&p);            for(j=1;j<N-1||j==N-1;j++)            {                   if(a[j]==p)                    printf("成绩是%d",b[j]);            }            n1=b[j];            switch(n1/10)            {               case 10: printf("成绩等级是A");break;            case 9: printf("成绩等级是B");break;            case 8: printf("成绩等级是C");break;            case 7: printf("成绩等级是D");break;            case 6: printf("成绩等级是E");break;            case 5: printf("成绩等级是F");break;            case 4: printf("成绩等级是G");break;            case 3: printf("成绩等级是H");break;            case 2: printf("成绩等级是I");break;            case 1: printf("成绩等级是J");break;            case 0: printf("成绩等级是K");break;            }            printf("\n");            printf("成绩大于等于80的学生的学号输入:");            scanf("%d",&p);            for(j=1;j<l;j++)            {                   if(e[j]==p)                    printf("成绩是%d",c[j]);            }            n2=c[j];            switch(n2/10)            {               case 10: printf("成绩等级是A");break;            case 9: printf("成绩等级是B");break;            case 8: printf("成绩等级是C");break;            }        }    }}int sum(int b[],int n){       int i,j,k,s;    s = 0;    for(i = 1; i < n; i++)    {           k = i;        for(j=i+1;j<n||j==n;j++)        {               if(b[j]==b[k])            {                   s++;                if(s==1)                    break;            }        }        if(s==1)            break;    }    return s;}
[解决办法]
你主函数最后少了一个括号,还有那个sum函数在前面没有申明。
------解决方案--------------------


楼上解决了??
[解决办法]
要不你验证一下?

探讨

楼上解决了??

[解决办法]
验证一下。
[解决办法]
偶遇到类似问题都是用
“每次用/*...*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。”
的方法解决的。

读书人网 >C语言

热点推荐