2016-12-29 6 views
0

У меня есть проект для школы, и в нем мне нужно получить четырехзначное число, а затем продолжить немедленно без ввода. Например: «Введите число: 1424», а затем оно просто продолжается, и вы не можете вводить больше чисел, а также, если нажатие клавиши «Ввод» не требуется. Я пробовал scanf("%4d",&num);, но он ждет клавиши Enter.c - как разбить scanf без ввода и без строки

И еще одно ограничение ... Я не могу использовать строки в этом проекте, поэтому все решения должны быть без строк.

+1

Добро пожаловать в переполнение стека! Покажите свои исследования/отладки. Сначала прочитайте страницу [Ask]. –

+0

Для реализации этой функции вам нужно что-то вроде [ncurses] (https://en.wikipedia.org/wiki/Ncurses). – emlai

+3

Поведение, которое вы ищете, контролируется * терминалом *, а не вашей программой. 'scanf' не может остановить ваш терминал от принятия большего количества символов от пользователя. Он не «восстанавливает контроль» до тех пор, пока пользователь не нажмет кнопку ввода. Для этого вам нужна библиотека доступа к терминалу, такая как ncurses. –

ответ

0

Единственный способ организовать ввод без нажатия клавиши Enter - это функции getch и getche от conio.h заголовок, который, я полагаю, не соответствует стандарту C/C++. Таким образом, стандартными именами POSIX являются _getch и _getche.

С помощью этих функций вы будете читать символ - который не является строкой, если вы обрабатываете каждый char отдельно.

UPDATE:

Мое решение:

#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 цифры должны стать числом, но, возможно, вам нужно сделать что-то еще с ними.

+0

это замечательно! Большое спасибо! –

0

Для чтения 4-х цифр вы, вероятно, захотите использовать char * fgets (char * str, int num, FILE * stream);, которые будут делать именно то, о чем вы просите. Вы не должны использовать scanf для интерактивного ввода, вы можете найти, почему в этом article

К строковой части, так как вы вводите ввод в ascii, вы уже работаете со строками (массивами символов).