Я новичок в программировании. Я работаю над домашним заданием, чтобы помочь нам понять scanf и массивы. Предполагается, что программа попросит пользователя ввести неизвестный набор чисел. Каждый набор чисел должен быть разделен пробелом, подобным ниже, без ввода ввода.Проблемы с использованием scanf внутри цикла while
14 15 16
Пользователь может также ввести числа на отдельной строке, а не с помощью пробелов, но опять-таки на последний номер пользователь занесены не должен нажать кнопку ввода.
12 13
44 55
5
Пользователь должен нажать ctrl-d, чтобы указать конец ввода. Программа должна отображать количество элементов, введенных пользователем, а также отображать введенные пользователем цифры. Я читал и думаю, что у меня есть базовая концепция работы scanf, но у меня все еще есть некоторые трудности. Кодовый вид работ. Однако, если пользователь просто вводит числа на одной строке, им нужно нажать ctrl-d три раза, чтобы он вышел из цикла и отобразил информацию.
Из того, что я нашел в Интернете и понимаю, я думаю, что он не работает, потому что пользователь не нажал return, поэтому вход не был сброшен в stdin. Поэтому, если я правильно понимаю, в первый раз я нажму ctrl-d, пока вы сбрасываете ввод. Затем во второй раз, когда я нажму ctrl-d, он, наконец, поместит EOF в поток, и в третий раз он, наконец, прочитает -1, созданный EOF, и выйдет из цикла. Есть ли способ принудительного ввода потока после ввода ctrl-d.
#include <stdio.h>
int main()
{
int numbers[20];
int i = 0, count, result, n;
int flag = 0;
printf("Please enter a seiries of numbers:\n");
while (flag == 0)
{
result = scanf("%d", &n); //scan user input into n variable along with getting scanf return value and storing in result variable
printf("result =%i \n", result); //Just printing scanf return value to insure it doing what I think it should be doing
if (result == 1)
{
numbers[i] = n; //if scanf return value is 1 places value of n into first element of array
i++; //used to increment my array
flag = 0;//keeps value of flag equal to 0 in order to stay in loop
}
if(result == -1) //checks to see if result = to -1 should be value returned if cntl +d is entered
{
flag = 1; //sets flag to 1 when cntrl +d is entered in order to exit loop.
}
}
for (count = 0 ; count < i ; count++) //loop to print I which is representing number of user inputs and the actual numbers entered by the user.
{
printf("\ni= %i numbers= %i\n", i, numbers[count]);
}
return 0;
}
Первый совет, напишите код, который люди могут читать не только компиляторы. –
'scanf' возвращает любой номер' -ve' на неправильном входе, не могу угадать '-1'. Так что можно сравнить с '0'. – ameyCU
Идиомы исследования больше. Код меньше. 'int val, n = 0; while (scanf ("% d", & val)! = EOF) {numbers [n ++] = val; } printf («Чтение% d чисел. \ n», n); 'должно работать нормально. Ctrl-D - это конец файла. Предоставление его более одного раза бессмысленно в каждой системе, которую я видел. – Gene