C语言学习笔记[24]:循环语句while②

avatar
作者
猴君
阅读量:1

getchar()的使用场景

int main() { 	char password[20] = {0}; 	printf("请输入密码:");//输入 123456 后回车 	scanf("%s", passwoed);//数组名本身就是数组地址 	printf("请确认密码:Y/N"); 	int ch = getchar(); 	if('Y' == ch) 		printf("确认成功\n"); 	else 		printf("确认失败\n"); 	return 0; }

执行结果却根本没有让输入Y/N,而是直接现实确认失败了

因为输入123456回车后,缓冲区中存放的是 123456\n 

接着scanf拿走了123456

getchar看到缓冲区中有数据,则直接拿走\n

此时ch中存放的\n

所以直接显示确认失败 

想要解决上述问题,可以进行如下操作,从而清理缓冲区的字符

#include <stdio.h>  int main() {     char password[20] = {0};     printf("请输入密码:"); // 输入 123456 后回车     scanf("%s", password);     int tmp = 0;     while ((tmp = getchar()) != '\n') // 一直用 getchar() 并把取出的数据存入 tmp 中,直到取出 \n     {         ;     }     printf("请确认密码:Y/N");     int ch = getchar();     if ('Y' == ch)         printf("确认成功\n");     else         printf("确认失败\n");     return 0; }

下面的代码输出什么呢?

#include <stdio.h>  int main() {     int ch = 0;                      while ((ch = getchar()) != EOF) // 输入字符     {         if (ch < '0' || ch > '9') // ch 小于字符 0 大于字符 9 时             continue;         putchar(ch);     }     return 0; }

 ch 小于字符 0 大于字符 9 时,跳过循环不打印,否则打印ch

即 只打印 0~9

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!