c - 如何在没有输入且没有字符串的情况下打破scanf

时间:2016-12-29 15:57:17

标签: c scanf

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

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

2 个答案:

答案 0 :(得分:0)

对于阅读4位数字,您可能希望使用char * fgets ( char * str, int num, FILE * stream );来完全按照您的要求进行操作。您不应该使用scanf进行交互式输入,您可以在此article

中找到原因

由于您在ascii中输入输入,因此您已经使用了字符串(字符数组)。

答案 1 :(得分:0)

在没有按下Enter键的情况下组织输入的唯一方法是来自getch标题的函数getcheconio.h,我想这不是C / C ++标准。所以POSIX标准名称是_getch_getche

使用这些功能,您将阅读字符 - 如果您单独处理每个char,则不是字符串。

<强>更新

我的解决方案是:

#include <stdio.h>
#include <ctype.h>
#include <conio.h>

int main(void)
{
    char ch;    // to store an input - single char
    int number = 0; // to make number from inputs
    printf("Enter a number: ");
    int digits_cnt = 0;
    while (digits_cnt < 4)
    {
        ch = _getche();
        if (isdigit(ch))
        {
            number *= 10;  // add an order to number
            number += ch - '0';  // add a decimal digit to number
            digits_cnt++;  // count this digit to stop loop
        }
    }
    // just to check result
    printf("\nThe number %d was entered.\n", number);
    return 0;
}

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