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===================================================

评论