C++中scanf()的行为
Behavior of scanf() in C++
当我输入字符串时,当scanf()期望浮点时,会发生什么?我以为这会是个例外,但我得到了无限循环。为什么,以及我如何控制?
好的,代码在这里
int main(){
float f;
scanf("%f", &f);
cout << "f = " << f << endl;
return 0;
}
scanf
尽可能多地读取,但如果它到达输入的末尾或输入与规范不匹配,它就会停止。它返回它读取的项目数,如果它提前停止,那么这个数字将小于格式字符串中的说明符数,并且任何不匹配的输入仍将在输入缓冲区中以备将来读取。
例如:
如果您int count = scanf("%f", &val)
,并且输入为"1.23",则val
将为1.23
,count
将为1
,并且输入将被消耗。
如果您使用int count = scanf("%f", &val)
,并且输入为"George",那么val
将保持不变,count
将为0
,"George"仍将在stdin上等待另一个读取使用。
您可以通过将count
与您试图读取的内容数量进行比较来检测故障,如果它太低,则以某种方式恢复,或者丢弃输入和错误。
相关文章:
- scanf() 只取数字作为输入,避免使用其他字符
- 为什么我的 scanf() 没有在我的数组上迭代我的 for 循环?
- 当我尝试使用它时,Scanf 会抛出一个随机异常(scanf_s 也是如此)
- 如何通过 scanf() 读取没有标点符号的字符串?
- 为什么这个scanf()的两个不同的输入会给出两个不同的输出?
- C++ - scanf() 和 printf() 执行顺序不对
- scanf( "%d" , array[i] + 1)是什么意思?为什么+1在那里?
- SCANF 读取错误,因为使用 %d 读取布尔值
- 为什么 printf 在 C++ 中的执行速度比 cout 快?另外scanf比cin慢,为什么?
- scanf() 的宽度说明符 - 要使用的字符长度在编译时不固定,仅在运行时确定.如何使其可变?
- 如何在循环中使用scanf,将值存储到一个变量中,然后打印出来?
- scanf() 语句中"%*[^n]"的格式字符串指示什么?分配抑制器 (*) 和否定扫描集 ([^) 如何协同工作?
- 在C/C++中检查数字是否为整数(不带scanf/gets/etc)
- 为什么我应该在scanf()-家族成员中包含一个长度修饰符作为参数?有什么好处?使用长度修改器进行扫描的作用
- 在printf和scanf中%lli和%lld之间的区别?
- 不能使用嵌套结构中的联合元素作为 scanf() 的参数来存储所需的值
- 使用 scanf 读取文件中的图形时出现问题
- 使用 scanf() 具有不同数据类型的多个输入
- 有没有办法中止 cin 或 scanf
- 字母 'f' 在 printf()、scanf() 和 seekg() 中的 'g' 代表什么?