如标题,scanf是一个「动态输入」的函数,你可以先宣告一个变数a,再用scanf输入,赋予它任意值,每次执行程序都可以输入不同的值给变数a
scanf可以用来输入字元
、数字
、字串
…等,格式为: scanf(“形式”, &变数名称1);
但用scanf连续输入时,会出现自动结束的问题
假设我们有一程序码长这样:
int main() {
int a;
char ch;
printf("请输入一个整数:");
scanf("%d", &a);
printf("请输入一个字元:");
scanf("%c", &ch);
printf("a=%d, c1=%c", a, ch);
return 0;
}
输入完20这个整数,并按enter
,它就会自动结束,可是我们还有字元c1
还没输入R!!
因为你输入完整数20,按下的那个enter(回车)
被留在缓冲区,以至於被下一个scanf吸收了,所以c1印出来会是空白的
那有没有什麽方法能解决这件事呢?有!以下有三种解决方法供各位参考
Ex 1:
在第二个scanf里的%c
前面加上「空格」,来抵销前面按的enter(回车)
int main() {
int a;
char ch;
printf("请输入一个整数:");
scanf("%d", &a);
printf("请输入一个字元:");
/* 在%c前面加上一个空格 */
scanf(" %c", &ch);
printf("a=%d, c1=%c", a, ch);
return 0;
}
这样就可以成功输入整数a和字元c1罗!
Ex 2:
在第一个scanf後加上ffluch()
,清空缓冲区内的资料,这样第二个scanf就不会吸收到enter(回车)
了
int main() {
int a;
char ch;
printf("请输入一个整数:");
scanf("%d", &a);
/* 清空缓冲区内的资料 */
fflush(stdin);
printf("请输入一个字元:");
scanf("%c", &ch);
printf("a=%d, c1=%c", a, ch);
return 0;
}
这样也可以成功输入整数a和字元c1
Ex 3:
你如果不想用fflush()
清空缓冲区,你也可以用getchar()
去吸收enter(回车)
这个字元
int main() {
int a;
char ch;
printf("请输入一个整数:");
scanf("%d", &a);
/* 吸收空格这个字元 */
getchar();
printf("请输入一个字元:");
scanf("%c", &ch);
printf("a=%d, c1=%c", a, ch);
return 0;
}
结果会和使用fllush()
一样:
以上三种解决方法,不仅适用enter(回车)
,也适用於「空格
」喔!
现在我们使用Ex 1.的方式,将整数a
和字元ch
放在一起输入,并在输入时用「空格」将a
和ch
隔开:
int main() {
int a;
char ch;
printf("请输入一个整数和字元:");
scanf("%d %c", &a, &ch);
printf("a=%d, c1=%c", a, ch);
return 0;
}
这样也可以成功输入整数a和字元c1喔!
以上就是今天的介绍
<<: [ 卡卡 DAY 27 ] - React Native keyboard 之乱之按萤幕就收键盘
Bootstrap 是全球最流行的前端开发工具,可以快速设计及自定义响应式网站。而 WordPres...
本篇是看 Go Concurrency Patterns 的心得 简报网址:https://talk...
DBA Bootcamp 下面这张图说明了 SQL Server AlwaysOn 可用性群组 (A...
yarn add -D tailwindcss@latest postcss@latest auto...
Rebalancing Partitions 每经过一段时间,资料库可能会因为以下几件事情改变: 为...