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

时间:2016-01-02 20:54:44

标签: 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等等) 并且在不按回车的情况下结束接收。

3 个答案:

答案 0 :(得分:1)

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

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

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

请参阅How can I prevent scanf() to wait forever for an input character?

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

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