C语言的两个简单问题

来源:百度知道 编辑:UC知道 时间:2024/05/18 10:45:32
#include "stdio.h"
main()
{char k;int i;
for(i=1;i<3;i++)
{ scanf("%c",&k);
switch(k)
{case '0':printf("another\n");
case '1':printf("number\n");
}
}
}
这段程序执行后输入 0<回车> 结果是
another
number
scanf语句在for循环里不是得执行两次的么?怎么输入一次就结束了?
还有 哪位高手能讲下while()的原理,while后的括号里可以是逻辑表达式如i>1什么的,但也看到过while(1)和while(*p)这样的,就不知道是什么意思了。

理论上是应该执行两次啊,循环体部分应该没什么问题的 ,回车也当字符读入了?
while(1)中1表示true的意思,也就是不管什么情况下都执行该循环这样的话,循环体内必须要有break否则死循环
while(*p)是指针了,一般在一维或者二维数组中存字符串时使用,用来判断‘\0’也就是字符串尾的

case '0':printf("another\n"); break;
case '1':printf("number\n"); break;

输入 0<回车>
时 实际输入的有 0 和 回车符或换行符 或 两个都有

每一次 scanf("%c",&k); 只取一个字符
缓冲取的字符没取完 不会提示你再次输入

可以用字符串来处理

scanf确实执行了两次,一次读入了0另一次读入了"\0"就是回车,所以输出了你所说的结果,scanf按c%格式每次读入一个字符如果你输入0"空格"再回车他也会把空格传给k,总之一句话scanf是执行了两次的
while()后的括号内可以是常量,变量,也可以是表达式,当括号内的值为0时不执行while循环,当非0时执行循环,对while(1)来说1非0故循环得到执行,对while(*p)来说也是一样的道理

是执行了两次,为什么会这样是因为,你的输入格式是字符型
当第二次循环时你的回车键被当做一个字符被赋给了k

scanf是执行了两次,一次读入了0,另一次读入了‘\0’((因为当你输入0后按回车时,计算机把'\0'自动地存入了字符缓冲区。当程序执行第二次的时候,scanf把‘\0’读入,所以你就会感觉像是只执行了一次。

如果要想真正的让它执行两次,要在scanf("%c",&k);后加getchar();把‘\0’从字符缓冲区取出。这样就能真正执行两次了

whil