4000 c语言里面用scanf连续输入字符型数据常见问题
2017-04-23 18:40
323 查看
#include <stdio.h> #include <stdlib.h> int main() { char i,j; printf("put in i:"); scanf("%c",&i); printf("i=%c\n",i); printf("put in j:"); scanf("%c",&j); printf("j=%c\n",j); return 0; }
很简单的一个程序,看起来应该没有问题,运行结果理论上应该像这样:
但是实际上是这样:
其中的原因就在于scanf是从标准缓冲区中读取输入的字符的,所以想上面那样写的时候字符型变量j接收的就是输入i之后输入的那个回车键。
解决方法:
1.用fflush(stdin);语句来清空缓冲区
代码:
#include <stdio.h> #include <stdlib.h> int main() { char i,j; printf("put in i:"); scanf("%c",&i); printf("i=%c\n",i); fflush(stdin); printf("put in j:"); scanf("%c",&j); printf("j=%c\n",j); return 0; }
这样就可以得到想要的结果了。
2.在scanf(“%c”,&j);中的%c之前加个空格->scanf(” %c”,&j);这样这个空格就可以抵消那个回车。
实际上这种情况通常会出现在定义了一个字符型数据(eg.char flag;)然后在一个for或者while循环里面会多次输入这个flag
eg.
#include <stdio.h> #include <stdlib.h> #define maxsize 10 int main() { char flag; int i,num[maxsize]; for(i=0;;i++) { printf("请输入数字:"); scanf("%d",&num[i]); printf("是否继续输入,如果是就输入y,反之输入n:\n"); scanf("%c",&flag); if(flag=='n') break; } return 0; }
运行程序是会出现这样的情况:
此时就可以使用上述两个方法解决。
例外,在使用getchar()输入字符的时候也会出现上述情况,此时除了可以用上述中方法一解决之外,对应上述的方法二可以可以改为:写两个getchar();
eg.
#include <stdio.h> #include <stdlib.h> int main() { char i,j; printf("put in i:"); i=getchar(); printf("i=%c\n",i); printf("put in j:"); j=getchar(); j=getchar(); printf("j=%c\n",j); return 0; }
这个方法的原理与上述方法二是一样的。
相关文章推荐
- 关于用连续用多个scanf函数输入数据时前面的scanf函数会在缓冲区留下回车符的问题
- scanf()函数连续输入数字,字符引发的小问题
- ACM连续输入多组数据问题
- C语言中用scanf连续输入两个字符类型的问题
- 关于多组数据连续输入,求最大值最小值问题
- [收藏]使用scanf输入double格式的数据问题
- scanf在输入整型数据和字符型数据时的不同
- 格式化输入输出浮点数据的细微问题(C标准:printf,scanf)
- C语言中用scanf连续输入两个字符类型的问题
- 一个字符变量存储到动态分配内存引发的输入问题解决--连续输入scanf函数存在缓冲区的问题
- scanf在输入整型数据和字符型数据时的不同
- [收藏]使用scanf输入double格式的数据问题
- 数据绑定常见问题
- Windows Forms数据控件和数据绑定常见问题
- Ado.Net操作Excel文件数据常见问题及解决
- 使用用户自输入数据来解决识别码的问题
- web标准常见问题--FF下如何使连续长字段自动换行
- 关于scanf 输入数据格式与格式化字符串不匹配的困惑
- 玩转数据恢复之R-Studio的使用常见问题解答
- 数据恢复之R-Studio的使用常见问题解答