鱼C论坛

 找回密码
 立即注册
查看: 4920|回复: 8

请求2个小问题 希望师傅们解答下。

[复制链接]
发表于 2013-3-14 19:55:24 | 显示全部楼层 |阅读模式
1鱼币
本帖最后由 Whisper微风 于 2013-3-18 22:38 编辑

在我的学习路那边发过一次,但是好像效果没有悬赏互助明显啊,一天都没人理我。..
话说 悬赏互助里面以前的我的学习路的版块去哪里了呢。。
#include <stdio.h>

void main()
{
        int i=0;
        char c;
        while(1)
        {
                c='\0';
                while(c!=13&&c!=27)
                {
                        c=getch();
                        printf("%c\n",c);
                }
                if(c==27)
                        break;
                i++;
                printf("The No.is %d\n",i);
        }
        printf("The End!");
}
1.这里面的c='\0'; 是什么意思呢?为什么要赋值这个呢,  我试着把这一条删除了 程序还是可以正常运行,所以我觉得c='\0';是不必要的,但是既然出现了,为什么呢 - -。谢谢
2.if(c==27)
                        break;
                i++;
                printf("The No.is %d\n",i);
        }
        printf("The End!");

}
这些语句怎么感觉没什么用。。输入回车或者esc都没有printf语句显示出来啊。   
调试的时候一直在while循环 。根本没有进入if语句。。


最佳答案

查看完整内容

这里的c = '\0', 是赋于C一个空值, 就像你定义一个int a = 0, float *p = NULL一样, 因为你定义了一个变量, 它的指向是不固定的, 它什么值都有可能。程序里有c!=27&&c!13, 如果你不这样赋初值的话, 它的值是不可预知的, 可能一开始, c的值就会是13或27, 会一下子就跳出循环了。。。这样我们写这个测试的程序就没意义了。。。。我个人认为, 对于定义变量, 还是赋一个初值比较好, 起码书 是这样的。我有一个外国人写的《C ...
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-3-14 19:55:25 | 显示全部楼层
本帖最后由 喜欢散步 于 2013-3-16 03:20 编辑

这里的c = '\0', 是赋于C一个空值, 就像你定义一个int a = 0, float *p = NULL一样, 因为你定义了一个变量, 它的指向是不固定的, 它什么值都有可能。程序里有c!=27&&c!13, 如果你不这样赋初值的话, 它的值是不可预知的, 可能一开始, c的值就会是13或27, 会一下子就跳出循环了。。。这样我们写这个测试的程序就没意义了。。。。我个人认为, 对于定义变量, 还是赋一个初值比较好, 起码书 是这样的。我有一个外国人写的《C程序设计》, 里面所有例子, 定义的所有变量, 一开始都类似这样:int a = 0, float b = 0.00, double * p = NULL等等, 我觉得这应是为了一种标准与防止程序出错吧。。。。。。


  1. #include <stdio.h>

  2. int main(void)
  3. {
  4. int a = 0;
  5. printf("Please input a char:");
  6. a = getchar();
  7. printf("%c\n", a);
  8. return 0;
  9. }
复制代码
这里int a = 0对于我们来说要不要都一样的, 不过一般建议写上, 为什么呢, 看下面的:
  1. #include <stdio.h>

  2. int main(void)
  3. {
  4. int a;
  5. while(a)
  6. {
  7. printf("Please input a number:");
  8. scanf("%d", &a);
  9. fflush(stdin); //清除输入缓冲区
  10. printf("%d\n", a);
  11. }

  12. return 0;
  13. }
复制代码
这里, 如果定义了int a不写上初始值的话, 一样会运行, 不过, 也有没法运行的情况出现, 因为没赋初值的话, a的初值不可预测, 为0也有可能, 所以, 一般我们这样写上面这个程序:
  1. #include <stdio.h>

  2. int main(void)
  3. {
  4. int a = 1; //我想要让用户自己来退出程序, 所以初始值为真就行
  5. while(a)
  6. {
  7. printf("Please input a number:");
  8. scanf("%d", &a);
  9. fflush(stdin); //清除输入缓冲区
  10. printf("%d\n", a);
  11. }

  12. return 0;
  13. }
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-3-14 20:07:45 | 显示全部楼层
   突然发现c=getch()
这里以前打成c=getcher去了  难怪错了。。
  
   什么情况下才会输出The end?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-3-14 20:15:42 | 显示全部楼层
自己找到问题了答案了
   
  请忽视我以上的第二个问题
   
  只想知道c='\n'的涵义咯
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-3-14 20:37:55 | 显示全部楼层
本帖最后由 翔儿 于 2013-3-14 20:43 编辑

c='\0';   // \0 赋值给char 等同给他一个空值. 如果循环了一次..c里面已经有值了.那么这里不给他个空值的话,是无法进入循环的
             //作为初始化赋值..由于变量的声明是随机值(内存中不被使用的一个块.).
           //你可以这么想.如果c 被定义出来后赋值的是 13 那么下面的语句则直接跳出循环
while(c!=13&&c!=27)  //当 c等于13和27跳出循环..所以下面还有一个if判断
if(c==27)
                         break;  //分号在break后面 当 c=27 的时候跳出的是while(1) 循环 不在执行下面的语句
                                     //如果c等于13那么执行i++;和后面的语句.然后继续循环while(1)
我说的好像有些复杂了.{:1_1:}..希望你能理解吧
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-3-14 21:45:42 | 显示全部楼层
建议楼主去看字符那里的视频,这个问题可以解决
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-3-14 22:42:56 | 显示全部楼层

好的 有人回答我就很高兴啦  就不能直接说吗- -
  我只是想知道c='\0'在这里的作用。。:lol
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-3-17 20:07:05 | 显示全部楼层
本帖最后由 xhhyi 于 2013-3-17 20:08 编辑

主要是赋初值,防止c之前的内存地址存储的值是要进行判断的值中的一个,这样就有可能导致直接退出
你可以赋值为其他你想要的值
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-3-20 23:42:07 | 显示全部楼层
应该是给个空操作,防止意外吧,,。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-8-5 20:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表