C语言中字符的输入

蛟龙-_- 2011-10-20 12:38:52
用VC编写关于字符输入的程序时,需要从键盘输入字符,这样写:
while(ch[i]!='\n'&&i<5)
{
ch[i]=getchar();
i++;
}
和这样写:
while(i<5)
{
scanf("%c",ch[i]);
i++;
} /*这样写程序无法运行*/
有什么区别啊?还有就是我看别人也有这样写的:
while((ch[i]=getchar())!='\n'&&i<5)
  {
i++;
}
求各位大侠解释一下。
...全文
117 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
palm_m 2011-10-20
  • 打赏
  • 举报
回复
scanf("%c",&ch[i]);
bdmh 2011-10-20
  • 打赏
  • 举报
回复
接1楼

while((ch[i]=getchar())!='\n'&&i<5),先ch[i]=getchar(),然后判断ch[i]是否为'\n'
Ol_lO 2011-10-20
  • 打赏
  • 举报
回复

scanf("%c",&ch[i]);
AnYidan 2011-10-20
  • 打赏
  • 举报
回复
while(i<5)
{
scanf(" %c", &ch[i]);
i++;
}
蛟龙-_- 2011-10-20
  • 打赏
  • 举报
回复
受教了,感谢各位大哥大姐。
自信男孩 2011-10-20
  • 打赏
  • 举报
回复
我想区别呢,第一种形式循环退出方式有两种,第二种形式循环退出只有一种了。遇到'\n'和i == 5退出,遇到i==5退出
第三种形式是最简洁的一种,但是读起来会可能有些困难,但是也是比较流行的代码写法。
qq120848369 2011-10-20
  • 打赏
  • 举报
回复
scanf()会留下回车的..
qq120848369 2011-10-20
  • 打赏
  • 举报
回复
scanf()会留下回车的..
赵4老师 2011-10-20
  • 打赏
  • 举报
回复
不要使用
while (条件)
更不要使用
while (组合条件)
要使用
while (1) {
if (条件1) break;
//...
if (条件2) continue;
//...
if (条件3) return;
//...
}
因为前两种写法在语言表达意思的层面上有二义性,只有第三种才忠实反映了程序流的实际情况。
典型如:
下面两段的语义都是当文件未结束时读字符
whlie (!feof(f)) {
a=fgetc(f);
//...
b=fgetc(f);//可能此时已经feof了!
//...
}
而这样写就没有问题:
whlie (1) {
a=fgetc(f);
if (feof(f)) break;
//...
b=fgetc(f);
if (feof(f)) break;
//...
}
类似的例子还可以举很多。
孤独小剑 2011-10-20
  • 打赏
  • 举报
回复
这样写:
while(ch[i]!='\n'&&i<5)
{
ch[i]=getchar();
i++;
}
达不到楼主所说的目的,而且结果也是不可测的ch[i]=getchar();获取一个字符,而while里的相当于是对ch[i+1]进行判断,原因楼主分析下。
这样写:
while(i<5)
{
scanf("%c",ch[i]);
i++;
} /*这样写程序无法运行*/
无法运行就对了,scanf你要的是地址,而ch[i]不是地址,应该这样写scanf("%c", &ch[i]);
推荐下面的形式:
while((ch[i]=getchar())!='\n'&&i<5)
  {
i++;
}
不过这个写错了,=号的优先级是最低的,所以ch[i]得出的不是getchar()的字符而是getchar()!='\n'的判断结果,应该这样写:
while('\n'!=(ch[i]=getchar()) && i<5)
{
...
}
haofang666777 2011-10-20
  • 打赏
  • 举报
回复
遇到‘\n’停止
重庆-老白 2011-10-20
  • 打赏
  • 举报
回复
你要问什么问题呀。。是不是就问你那个程序无法运行啊?

69,381

社区成员

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

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