求救,我这个程序为啥一直出现烫烫

qq_33385578 2017-09-30 12:08:15
#include<stdio.h>
struct student
{
char name[21];
int score;
};
int main(){
struct student a[100],t;
int i,j,n;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%s %d",a[i].name,&a[i].score);
for(i=1;i<=n-1;i++)
for(j=1;j<=n-i;j++)
if(a[j].score<=a[j+1].score)
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
for(i=1;i<=n;i++);
printf("%s\n",a[i].name);
getchar();getchar();
return 0;
}
...全文
451 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
HomerRo 2017-10-04
  • 打赏
  • 举报
回复
主要是你的程序里面的字符串char name[21]没有合法的结尾符“\0”,所以就使程序跑出界限,同时显示乱码“烫烫”!改进如下:这样可以了吧O(∩_∩)O
希怀 2017-09-30
  • 打赏
  • 举报
回复
烫烫 啥意思
Saleayas 2017-09-30
  • 打赏
  • 举报
回复
在 DEBUG 版本中,变量之间是不连续的,为初始化的变量和变量之间的边界都是被编译器处理过的。 没有初始化的变量,DEBUG 会初始化为 0xCC 的,这个值和 烫 的内码一致。
Saleayas 2017-09-30
  • 打赏
  • 举报
回复
for(i=1;i<=n;i++); printf("%s\n",a[i].name); 去掉 for 后面的分号就可以了。 写程序的时候要规范。我在 for 和 if 之后的语句块一律使用 {}; 就算是是空循环也把分号写在 {;} 里面。
qq_33385578 2017-09-30
  • 打赏
  • 举报
回复
他出的是空,什么都没有,是程序有问题么?
starytx 2017-09-30
  • 打赏
  • 举报
回复
给struct student加上默认构造函数,给里边的字符串初始化试试 示例如下: struct student { char name[21]; int score; student() { memset(name ,0, 21); score = 0; } }
窝米逗佛~ 2017-09-30
  • 打赏
  • 举报
回复
 * 0xABABABAB : Used by Microsoft's HeapAlloc() to mark "no man's land" guard bytes after allocated heap memory 漱 * 0xABADCAFE : A startup to this value to initialize all free memory to catch errant pointers 涵? * 0xBAADF00D : Used by Microsoft's LocalAlloc(LMEM_FIXED) to mark uninitialised allocated heap memory 很? * 0xBADCAB1E : Error Code returned to the Microsoft eVC debugger when connection is severed to the debugger 撅饰 * 0xBEEFCACE : Used by Microsoft .NET as a magic number in resource files 烫烫 * 0xCCCCCCCC : Used by Microsoft's C++ debugging runtime library to mark uninitialised stack memory 屯屯 * 0xCDCDCDCD : Used by Microsoft's C++ debugging runtime library to mark uninitialised heap memory 葺葺 * 0xDDDDDDDD : Used by Microsoft's free() or delete to mark freed heap memory 蕲蕲 * 0xDEADDEAD : A Microsoft Windows STOP Error code used when the user manually initiates the crash  * 0xFDFDFDFD : Used by Microsoft's C++ debugging heap to mark "no man's land" guard bytes before and after allocated heap memory  * 0xFEEEFEEE : Used by Microsoft's HeapFree() to mark freed heap memory
酱油党 2017-09-30
  • 打赏
  • 举报
回复
你的变量内存中没有初始化,值为0xCCCCCCCC 而两个字节的0xCCCC的编码对应的中文就是 烫 , 所以你的程序里会有一堆烫烫
自信男孩 2017-09-30
  • 打赏
  • 举报
回复
#include<stdio.h>

struct student
{
    char name[21];
    int score;
};

int main()
{
    struct student a[100],t;
    int i,j,n;

    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%s %d", a[i].name,&a[i].score);
    for(i=1;i<=n-1;i++)
        for(j=1;j<=n-i;j++)
            if(a[j].score<=a[j+1].score)
            {
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }
    for(i=1;i<=n;i++)    /*去掉这儿的分号*/
        printf("%s\n",a[i].name);
    getchar();
    getchar();
    return 0;
}
建议i从0开始,因为数组的下标都是从0开始的。另外,对n的值进行检查,若大于100,则会出现数组越界,因此n不能超过100;

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧