c - 当我按下“q”键时,如何停止接受用户的输入?
问题描述
我整天研究这个问题,看到了所有其他类似的问题,但不知何故我错过了一些东西,我的代码根本不起作用。我注意到了一个错误;当程序按升序对数字进行排序时,通常不会读取第一个和最后一个数字。我只是对为什么会出现这个问题以及如何使它工作感到好奇。我想我的代码完全是荒谬的,所以我不想浪费你的时间,如果你能提供一些提示,这对我来说就足够了:)
#include <stdio.h>
int main ()
{
int i,b,c,n;
int number[200];
char option;
do
{
printf("Please enter numbers you wanna input: ");
scanf("%d", &n);
for(int i=0; i<n; ++i) {
scanf("%d",&number[i]);
}
option = getchar ();
while(getchar() != '\n');
}
while (option != 'q');
for (i=0; i<n; ++i)
{
for (b=i+1; b<n; ++b)
{
if (number[i]>number[b])
{
c=number[i]; //i used c as temp.
number[i]=number[b];
number[b]=c;
}
}
}
printf("Sorted order of given numbers is this: \n");
for (i=0; i<n; ++i)
printf("%d\n",number[i]);
return 0; }
解决方案
如果您在数字后输入换行符,scanf("%d",&number[i]);
则会将输入的换行符留在缓冲区中,并由option = getchar ();
. 因此,option
无法正确获得所需的用户输入。
那个部分
option = getchar ();
while(getchar() != '\n');
应该
scanf(" %c", &option);
注意前面的空格%c
。这意味着应该忽略空白字符(包括换行符)。
推荐阅读
- sql - MySQL分页的用户排名列表以及排名
- reactjs - 使用 JEST 测试服务器时如何访问 process.env 中的 RAZZLE 变量?
- mudblazor - 即使组件填充了数据,MudBlazor 的自动完成功能也不起作用
- android - 如何使用 AppCompatActivity 使 Actionbar 的选项菜单的波纹效果不超过圆角边界?
- pandas - groupby.median() 和 groupby.transform('median') 有什么区别
- ruby-on-rails - 【Rails】如何在route.rb中写入子目录路径?
- javascript - Mutation Observer 观察其子元素发生变化的父 DOM 元素
- ios - 如何在我的 Swift 应用程序中向多个单一联系人发送短信?
- flutter - 如何在 Flutter Web 中使用 lib assets_audio_player
- flutter - 每 50 毫秒 Flutter 任务