c - C 语言:Scanf
问题描述
这是一个简单的 C 程序,它解释了 do while 循环。在循环结束之前有两个 scanf 。/我真的对一个“ scanf("%d",&dummy); ”感到困惑。没有这一行,程序将无法按预期运行。所以,我相信这条线作为某种占位符来创建一个空间来接受聊天输入。但我不确定这一点以及它实际上是如何工作的
#include<stdio.h>
#include<stdlib.h>
void main ()
{
char c;
int choice,dummy;
do{
printf("\n1. Print Hello\n2. Print Javatpoint\n3. Exit\n");
scanf("%d",&choice);
switch(choice)
{
case 1 :
printf("Hello");
break;
case 2:
printf("Javatpoint");
break;
case 3:
exit(0);
break;
default:
printf("please enter valid choice");
}
printf("do you want to enter more?");
scanf("%d",&dummy); //This part confuses me
scanf("%c",&c);
}while(c=='y');
}
解决方案
一旦用户输入一个选项并按下Enter键,数字将被读取到但不包括行尾字符。没有这个scanf("%d", %dummy);
,行尾字符仍然存在并被读入c
. 由于不等于'y'
,因此您的循环终止。
通过scanf("%d", dummy);
调用,空格被消耗以寻找数字。请注意,scanf 文档说:“在尝试解析输入之前,除了 [、c 和 n 之外的所有转换说明符都会消耗并丢弃所有前导空白字符(就像通过调用 isspace 一样确定)。” 当遇到非空白、非数字字符(例如“y”或“n”)时,整数的读取失败。没关系,反正你无视。但是现在“y”或“n”可以读入c
。
更简单的方法是更改scanf("%c", &c);
为scanf(" %c", &c);
(注意 之前的空格%c
)。这告诉scanf
在将字符读入c
. 它更加地道。
推荐阅读
- machine-learning - 如何在机器学习算法中将地址作为输入与其他整数数据一起输入来训练模型?
- codeigniter - 数据未保存到表中
- ocaml - 如何更改树的类型以返回几乎任何类型的树的正确值?
- r - 在 R 中,如何使用 ggplot 在欧洲地图上绘制项目的位置及其来源?
- python - 更新 apache-beam-dataflow 和 google-cloud-bigquery 的指南
- java - 我正在验证结果集是否为空
- sql - 从雪花中的 Postgres 复制 FILTER 子句
- blogger - blogspot 分页:如何在访问标签时删除旧帖子文本并将其替换为行号?
- javascript - 新 Google 站点中的 JQuery
- reactjs - Jest 异步 componentDidMount 验收测试