扫描多个数字而不扫描输入C

我正在尝试扫描4个数字而不按Enter(我希望它在看到有4个数字时结束扫描)。 我正在使用这个方法:

printf("Enter 4 Numbers(with space):\n"); scanf("%d %d %d %d" , &guess1 , &guess2 , &guess3 , &guess4); 

但它需要数字之间的空格并在最后按Enter键。 那么如何让它接收例如:1234(num1 = 1,num2 = 2等等)并结束接收而不按Enter键。

要输入"1234"并扫描为4位数,请使用"1 ”来限制每个整数的数据输入的文本宽度

 if (scanf("%1d%1d%1d%1d" , &guess1 , &guess2 , &guess3 , &guess4))!=4) Handle_Input_Error(); else Success(); 

stdin是usualy线缓冲。 因此,在不等待Enter的情况下读取数据,解决方案是特定于平台的。

请参阅如何防止scanf()永远等待输入字符?

你不能以你想象的方式做到这一点,因为在你按回车之前你的过程没有得到任何东西。 这就是缓冲的工作原理。 如果你真的想这样做(并且你没有给出理由),你可以考虑一个特定于操作系统的控制台UI库,比如Linux的ncurses或者DOS的等价物,它可以让你捕获每个按键。 然后你必须通过收集个别数字来组合数字。 但这并不容易,并且会将整个程序转换为您可能不想要的东西。 给我们一个理由,你想要按照你描述的方式做到这一点?

它只是删除了scanf()中%d之间的空格,你可以输入1 2 3 4之类的数字,然后按回车键,数字将分别存储在guess1,guess2,guess3和guess4中。 printf(“输入4个数字(带空格):\ n”);

 scanf("%d%d%d%d" , &guess1 , &guess2 , &guess3 , &guess4); 

所以你必须学习Technic来读取用空格分隔的数字。