2015-06-05 4 views
0

Я пытаюсь ввести ряд чисел, каждое число разделяется пробелом. Ряд чисел должен прекратить принимать входные данные, если задан 0.Отдельный вход scanf с пробелом в C

Я делаю это с помощью петли for. Если я отделяю каждое число с \n, он действительно перестает считывать ввод после того, как я дал 0 в качестве числа.

Но если я вместо каждого отдельного номера с пробелом, ничего не произойдет после того, как я дам 0. Он просто читает ввод.

Я попытался найти ответ, извините, если решение очевидно. Я только начал в C, пожалуйста, медведь со мной ..

int main(int argc, char **argv){ 

    int ar[1000]; 
    int i; 

    printf("Give a series of numbers, separated by space. Stop reading when `input is 0.\n --> : ");` 

    for (i = 0; i < SIZE ; i++){ 
     scanf("%d", &ar[i]); 
     if (ar[i] == 0){break;} 
    } 

    return 0; 
} 
+3

Вы должны нажать enter, чтобы начать обработку этой строки. 'scanf' даже не считывает первое число в строке, пока вы не нажмете enter. – wimh

+0

Если я правильно вас понимаю, scanf инициализирует только после нажатия клавиши ввода? Разве это не так? (используя scanf), чтобы инициализировать цикл с пробелом? Спасибо за ваш ответ. – whizdiz

+1

ваш код имеет пару ошибок компиляции, но должен работать с исправленными: SIZE должен быть определен где-то (возможно, у вас есть это в заголовке?), И он должен действительно соответствовать размеру вашего массива; и у вас есть беспризорный апостроф в конце строки printf. – pb2q

ответ

3

По умолчанию большинство терминалов командной строки будет посылать вход только в запущенную программу после того, как вы закончите вводить всю строку. Это даст вам возможность исправить опечатки с помощью клавиши backspace.

Одним простым решением является, вместо ввода ввода вручную, поместить его в текстовый файл и использовать перенаправление ввода файла (<). Этот синтаксис перенаправления ввода работает как на Linux, так и на оболочках Windows.

myProgram.exe < myInput.txt 
+0

спасибо за подсказку, может пригодиться позже. Хотя теперь я стараюсь следовать своему назначению, что явно ожидает, что ввод будет выполнен вручную. – whizdiz

+0

Как остановить ввод, как только вы наберете a 0, но прежде, чем вы нажмете новую строку, довольно сложно, и вам нужно использовать API-интерфейсы, специфичные для вашей операционной системы. Вы уверены, что оба эти требования? Возможно, это ОК, чтобы напечатать новую строку в конце? – hugomg

+0

Действительно, Думаю, мне придется согласиться на новую линию: это задания после первой вводной лекции, они не могут быть такими сложными, как решения, которые я нахожу. Сейчас я пытался с помощью getch ar(), но да, я думаю, что обработка буфера также должна быть решена, и это, вероятно, не то, что они ожидают от меня. – whizdiz

Смежные вопросы