while ((c = getchar()) != '\n');
作用:从键盘输入字符,直到输入回车为止, 最后的分号为循环体,即一个空语句
等价于:
c = getchar();
while( c != '\n' )
c = getchar();
当然也可用for语句实现,如:
for( ; (c = getchar()) != '\n' ; )
printf("%c", c) ;
其作用是每读入一个字符后立即输出该字符,直到输入一个“换行”为止。注意:从终端键盘向计算机输入时,是在按Enter键以后才送到内存缓冲区中去的。不是从终端敲入一个字符马上输出一个字符,而是按下Enter键后数据送入内存缓冲区,然后每次从缓冲区读一个字符,再输出该字符。
#include <stdio.h>
int main()
{
char c;
for( ; (c = getchar()) != '\n' ; )
printf("%c", c) ;
return 0;
}
运行结果:
====================
afdasdfkjffl&%#$879e↙
afdasdfkjffl&%#$879e
====================
用while语句实现如下:
#include <stdio.h>
int main()
{
char c;
c = getchar();
while( c != '\n' )
{
printf("%c", c);
c = getchar();
}
return 0;
}
★ 可以把循环体和一些与循环控制无关的操作也作为for语句的“括号内条件语句”,这样程序可以短小简洁。但过分利用这一特点会使for语句显得杂乱,可读性降低,建议不要把与循环控制无关的内容放到for 语句中。
---------------------------------------
练个题:《C程序设计》(谭) P120 6.2
输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
#include <stdio.h>
int main()
{
char c;
int letter = 0, digit = 0, space = 0, other = 0;
printf("Enter some characters:\n");
while((c = getchar()) != '\n')
{
if(c >= 'a' && c <= 'z' || c>= 'A' && c <= 'Z')
letter++;
else if(c == ' ')
space++;
else if(c >= '0' && c <= '9')
digit++;
else
other++;
}
printf("letter:%d, space:%d, digit:%d, other:%d\n", letter, space, digit, other);
return 0;
}
运行结果(VC):
===================================================
Enter some characters:
asdf#4094l lfdslkf[30 lkdf]30- 093odf↙
letter:19, space:3, digit:11, other:4
===================================================
评论