用scanf输入字符和字符串,fflush(stdin); 您所在的位置:网站首页 用scanf函数输入字符串student 用scanf输入字符和字符串,fflush(stdin);

用scanf输入字符和字符串,fflush(stdin);

2023-07-27 20:01| 来源: 网络整理| 查看: 265

scanf输入字符和数字的疑问 1、有两个整型变量a,b,要求先输入a的值,如果a==1,则直接出入a=1;否则,要求输入b,然后输出b=ab。

#include int main() { int c1 = '0'; int c2 = '0'; printf("input c1 = "); scanf ("%d", &c1); if ( c1 == 1) { printf("c1 = 1\n"); return 0; } else { printf("input c2 = "); scanf("%d", &c2); printf ("c2 = %d%d\n", c1,c2); } return 0; }

代码可运行,结果也正确!

2、有两个字符型变量a,b,要求先输入a的值,如果a==‘y’,则直接出入a=y;否则,要求输入b,然后输出b=ab。

错误代码:

#include int main() { char c1 = ' '; char c2 = ' '; printf("input c1 : "); scanf ("%c", &c1); if ( c1 == 'y') { printf("c1 = y\n"); return 0; } else { printf("input c2 : "); scanf("%c", &c2); printf ("Char = %c%c\n", c1,c2); } return 0; }

输入完C1后,如果C1不是y,无法输入C2,似乎也没有执行: printf (“char=%c%c\n”, c1,c2); 无法理解原因,上网查找。

原因: 当调用scanf时,输入的字符送到输入缓冲区,然后scanf从中读取所规定的字符,但是空格和回车也会被scanf认为是字符,所以当输入完C1,回车后,回车被存储在缓冲区,再调用scanf的时候,直接将回车(空)赋值给C2,因此表现为不用再输入C2。而且,并不是没有执行最后一句printf语句,而是输出时char = C1空,即C2的位置为空。 解决办法: 一、getchar()从控制台接收字符,只能提走一个字符

#include int main() { char c1 = ' '; char c2 = ' '; printf("input c1 : "); scanf ("%c", &c1); getchar();//把回车提走 if ( c1 == 'y') { printf("c1 = y\n"); return 0; } else { printf("input c2 : "); scanf("%c", &c2); printf ("c2= %c%c\n", c1,c2); } return 0; }

二、fflush(stdin)清空输入缓冲区

#include int main() { char c1 = ' '; char c2 = ' '; printf("input c1 : "); scanf ("%c", &c1); if ( c1 == 'y') { printf("c1 = y\n"); return 0; } else { fflush(stdin);//再次输入前,先清空输入缓冲区 printf("input c2 : "); scanf("%c", &c2); printf ("c2= %c%c\n", c1,c2); } return 0; }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有