C语言新手问题

新手问题
/* d */
#include "stdio.h"
#include "conio.h"
main()
{ char *answer,*result="ok";
gets(answer); -----------8
if(answer!=result) -----------9
printf("You are a fool!");
else
printf("Good!");
getch();
}
警告 noname.c 8: 可能在'answer'定义以前使用了它在 main 函数中
警告 noname.c 9: 可能在'answer'定义以前使用了它在 main 函数中

有以上两条警告,可以运行,但是无论输入什么,都显示You are a fool!
这是怎么回事啊?高手帮帮忙啊

第1个回答  2007-12-21
这个answer是指针,但也仅仅是个指针,程序没有为后来的输入分配存储空间,况且还没有初始化,但是却是有值的,也就是说answer指向了一个内存地址,后来的输入会放在那里,尽管那里存放着其他变量或指令的数据,但会覆盖掉原有的正确内容,gets函数在这里所做的就是将内存中一段有效数据换成你所输入的内容,几乎肯定会出错,需要改成
char answer[50];
这样就有50个字节给你输入,当你输入的数据太多还是会有有效数据被覆盖。
还有,字符串比较要这样写
strcmp(answer,result)==0。
第2个回答  2007-12-22
简单的说下`:
第一` 你的本意是想比较两个字符串:但你的那种做法行不通,要用strcmp函数
第二. 你的answer定义的是指针, 并未指向任何数据就进行赋值, 这是非常危险的,因为answer指到哪里都有可能,它的值不能预见`
改成这样就可以了
#include "stdio.h"
#include "conio.h"
#include "string.h"
main()
{ char answer[20],*result="ok";
gets(answer); //-----------8
if(strcmp(answer,result)!=0)
printf("You are a fool!\n");
else
printf("Good!\n");
getch();
}
至于这里的strcmp函数 解释一下吧:
原型:extern int strcmp(char *s1,char * s2);

功能:比较字符串s1和s2。

说明:
当s1<s2时,返回值<0
当s1=s2时,返回值=0
当s1>s2时,返回值>0本回答被网友采纳
第3个回答  2007-12-21
你有两个问题
1 answer没有分配内存,可改为char answer[10]
2 比较两个字符串不能用=,要用函数strcmp
原型 int strcmp(char*,char*) 若相等返回0,否则返回非0
你的程序可以修改如下:
#include "stdio.h"
#include "conio.h"
#include <string.h> //!!!!!!!
void main()
{ char answer[10],*result="ok"; //!!!!!!!!!!!
gets(answer);
if(strcmp(answer,result)) //!!!!!!!!!
printf("You are a fool!");
else
printf("Good!");
getch();
}
第4个回答  2007-12-21
你定义的char *answer没有为它分配内存,它的内容是一个不确定的值,所以 用gets就没有意义了.应该先加上
answer=(char *)malloc(30);
malloc 在<malloc.h>中,当然分配的内存大小可以自已找个合理点的值.
第5个回答  2007-12-21
因为 你定义的是指针变量( *answer,*result),而 answer和result是两个地址,你知道ok在内存中的地址吗?那只能printf("You are a fool!"); 。
况且地址是电脑分配,你也无法输入啊!!

相关了解……

你可能感兴趣的内容

大家正在搜

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