C语言 烫烫烫烫烫烫烫烫烫烫烫烫的问题。求大神
分析
1、struct stu student[NUM]; //你不都说你定义了多个人,但只输入了一次信息吗。#define NUM 3/*人数*/
2、 case 2:print(student,NUM);break;//你调用输出函数的时候NUM参数是输出NUM个人,
3、因为只输入一个student的信息,其他student[1]、student[2].......没有值,直接输出上次内存所存,这就是随机的乱码。
解决思路
方案1:
输入信息的时候输完NUM 次也就是3次。
方案2:
调用输出的时候,只让他输出你所输入信息的个数。
case 2: print(student,1);break; //这里参数二中NUM换成 1,因为你只输入1次信息
方案 3: /**推荐方案*/
定义数组的时候初始化,使得其初始化都为0,这样输出的时候至少不会有乱码
struct stu student[NUM] = {0};
或
struct stu student[NUM] ;
memset(student,0,sizeof(stu)*NUM);
这是使用scanf必然会出现的现象,建议你最好是用以下函数来达成目的
getch();
getche();
kbhit();
这几个函数都是非阻塞的,而且每一个需要多余的回车,
用一个循环把他们组装起来,然后每一次有按键的时候先把数据暂存起来,然后用ANSCII码来检测这个按键是否为你想要的数据,然后进行转换,不是就扔掉,继续等待按键,一直到数据收集完毕,这样就避免了用户的无效输入。
用getch和getche接受的都是字符,就是说,你按下“1”键产生的是(char)'1' 而不是 (int) 1
这就是问什么数据采集后要进行适当的兑换了。
至于具体的做法,相信这位兄弟已经了解了,关于ANSCII码,字符型的数据的数值就是它本身的ANSCII码值。
Addd[n] = 0;
不如你的Addd没有结束符,前面正常,后面的都是一堆烫
另外一种就是把Addd所有元素都设置为'\0'
字串最后加上0
for(;n>=0;n--,i++)
{
Addd[i]=Add[n];
}
Addd[i+1]= 0;
攸燕力补: 在字符数组最后加上 '\0',作为字符串结束标志. strcpy(studname[k],ntemp); bai strcpy(studname[i],studname[k]); strcpy(ntemp,studname[i]); strcpy(ntemp,studname[k]); strcpy(studname[k],studname[i]); strcpy(studname[i],ntemp); 扩展资料: ...
尼木县15154133867: c语言 烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫 急求 - ?
攸燕力补: #include<stdio.h> int main() { char a[101],e[101]; int b,c,i; b=0; scanf("%s",a);for(i=0;a[i]!='\0';i++) //此处原来的循环条件错了 {for(c=0;a[i]!=a[c]&&c<=i;c++); //在前面的字符中对比查找相同字符 if(c==i) {e[b]=a[i];b++; }}//如果没找到则记录此字符,找到则不记录 e[b] = 0; //此处加了个字符串结束符 printf("%s\n",e); return 0; }
尼木县15154133867: C语言,这个程序运行后怎么出现“烫烫烫烫烫烫烫烫烫烫烫烫……”啊?向高手求助! - ?
攸燕力补: 请lz在使用数组前,先把字符数组用'\0'初始化!就行ok了!因为的字符串的长度是80.而可能你赋值的时候,没有达到80的长度!而且程序也不会自动帮你添加'\0'.所以打印的时候,是整个数组全部打印出来的!也就出现了这些...烫烫烫烫烫烫....的乱码!请参考函数zeromemory!!!!!
尼木县15154133867: c语言出现一大堆烫烫烫烫 - ?
攸燕力补: # include "string.h" # include "stdio.h" # include "stdlib.h" struct admin { char name[20]; int keynumber; int number[100]; int zhuangtai;}number[100]; main() { int n,a,b,m,y,i; n=1,y=1; if(n
尼木县15154133867: C语言 烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫??? - ?
攸燕力补: 很有可能是字符串的末尾没有加'\0'之类的错误 icrosoft C&C++ Debugger会对未初始化的内存填充magic number,对于栈是0xCCCCCCCC,0xCCCC在GBK中就是“烫”.
尼木县15154133867: C语言程序后面出现烫烫~~~~~ - ?
攸燕力补: while(message[i] != '\0' && i
尼木县15154133867: 初学c语言,用vs2010做作业 名字输出结果烫烫烫烫烫烫烫 - ?
攸燕力补: 代码没有太大的问题(除了那个fflush函数结果是未定义的) 我猜是你输入的姿势不正确,scanf("%d,%s",&number,name);中%d和%s之间你用逗号分隔,意思就是你输入时要按:数字 逗号 字符串 的形式输入 比如:123,abc.如果没有中间那个逗号,那么读完数字之后scanf就停止读取了,所以name中是没有数据的.正好在VC下debug模式,字符串是用烫填充,所以输出时看到的都是烫烫烫了
尼木县15154133867: C程序运行出现烫烫烫,怎么办啊急死了,求高手改进 - ?
攸燕力补: 应该是栈数据没清空又当做字符串了,VC在debug模式时,未初始化的变量会被系统赋初值为0xCC ,因为它超过了ASCII码的0-127范围,所以这个“字符串”被当成了宽字符字符串,每两个字节组成一个字符,而0xCCCC表示的宽字符正好是“烫”字,而没有初始化的堆数据好像是“屯”这个字.
尼木县15154133867: c语言出现烫烫 - ?
攸燕力补: struct Student { int num; char name[20]; char sex; float midscore; float finalscore; Student() { num = 0; name = {0}; midscore = 0; finalscore = 0; } };你没有初始化,C语言里变量是要初始化的话,否则,系统会随机分配值的
尼木县15154133867: c语言中输出有个烫字,求高人指点 - ?
攸燕力补: for(i=0;i<20;i++) {printf("%c",a[i]);} “烫”是你的这一句输出的,键盘输入的字符串字符数少于20个,比如:abcdefg 这一句输出:abcdefg 烫烫烫烫烫烫 共20个字符:7(abcdefg)+1(空格)+6(烫)*2=20 一个中文“烫”是2个字符