c-如何在没有输入和字符串的情况下中断scanf

c-如何在没有输入和字符串的情况下中断scanf,c,scanf,C,Scanf,我有一个学校的项目,在其中,我需要得到一个四位数的数字,然后立即继续没有输入。例如:“输入一个数字:1424”,然后它只是继续,您不能再输入数字,也不需要按Enter键。 我尝试了scanf(“%4d”和&num)但它等待Enter键 还有一个限制是。。。我不能在这个项目中使用字符串,所以所有的解决方案都必须没有字符串。对于读取4位数字,您可能需要使用它,它将完全满足您的要求。您不应该使用scanf进行交互式输入,您可以在下面的示例中找到原因 对于字符串部分,因为您正在用ascii输入,所以您已

我有一个学校的项目,在其中,我需要得到一个四位数的数字,然后立即继续没有输入。例如:“输入一个数字:1424”,然后它只是继续,您不能再输入数字,也不需要按Enter键。 我尝试了
scanf(“%4d”和&num)但它等待Enter键


还有一个限制是。。。我不能在这个项目中使用字符串,所以所有的解决方案都必须没有字符串。

对于读取4位数字,您可能需要使用它,它将完全满足您的要求。您不应该使用scanf进行交互式输入,您可以在下面的示例中找到原因


对于字符串部分,因为您正在用ascii输入,所以您已经在使用字符串(字符数组)。

在不按Enter键的情况下组织输入的唯一方法是
getch
getche
来自
conio.h
标题,我认为这不是C/C++标准。因此POSIX标准名称是
\u getch
\u getche

使用该函数,您将读取字符-如果单独处理每个
char
,则这些字符不是字符串

更新:

我的解决办法是:

#包括
#包括
#包括
内部主(空)
{
char ch;//存储输入-单个字符
int number=0;//根据输入进行编号
printf(“输入一个数字:”);
整数位数=0;
while(数字<4)
{
ch=_getche();
if(isdigit(ch))
{
number*=10;//将订单添加到number
number+=ch-“0”;//为数字添加一个十进制数字
digits_cnt++;//计算此数字以停止循环
}
}
//只是为了检查结果
printf(“\n输入了编号%d。\n”,编号);
返回0;
}

我假设所有4位数字都应该成为一个数字,但是,也许您需要用它们做些其他的事情。

欢迎使用堆栈溢出!请展示您迄今为止的研究/调试工作。请先阅读第页。要实现此功能,您需要类似的内容。您寻求的行为由终端控制,而不是由您的程序控制
scanf
无法阻止您的终端接受来自用户的更多字符。在用户按下enter键之前,它不会“重新获得控制”。为此,您需要一个像ncurses这样的终端访问库。在Unix系统上,可能需要一个带有一些_getch()的循环。您可以键入四位数字,然后键入control-D(除非您更改了终端设置)。这会将四位数字发送到%4d。使用%d,您需要在数字后添加空格(最安全的选择)。这一切都与终端模式和原始与熟输入有关。这太完美了!非常感谢你!