Программа не запрашивает ожидаемое количество значений

#include <stdio.h>
main()
{
int n,i;
FILE *fptr;
fptr=fopen("f3.txt","w");
if(fptr==NULL)
{
printf("Error!");
exit(1);
}
printf("Enter n: ");
for(i=0;i<=2;i++)
{
scanf("%d \n",&n);
fprintf(fptr,"%d ",n);
}
fclose(fptr);
return 0;
}

РЕДАКТИРОВАТЬ: *В вышеупомянутой программе я ввожу 3 значения, но почему это запрашивает 4 значения? Хотя его написание только три раза, но его просит значения 4 раза. Можете ли вы сказать причину? И что нужно сделать, чтобы оно приняло точное количество значений, которые я набираю.?* заранее спасибо..

Так что известно, что это произошло из-за пробела рядом с% ​​d в цикле. Может кто-нибудь объяснить Возврат каретки в мельчайших подробностях, я искал, но не мог точно понять, что это такое.

-1

Решение

Вы вводите не 4 значения, а 3. for оператор проходит через 0, 1 и 2. Если кажется, что он запрашивает у вас 4 значения из-за строки формата, которую вы использовали в scanf(), Просто используйте "%d"без пробела и \n,

Кроме того, могу ли я предложить вам повторить printf ("Enter n: "); как раз перед scanf() и не только в начале вашей программы? Таким образом, вы быстро поймете, когда программа запрашивает данные или когда scanf() только что застрял в ожидании некоторых завершающих данных, например, возврата каретки, чтобы принять предыдущие данные.

Если вы измените printf как я говорю вам, и не меняйте формат строки в scanf(), вы поймете, что ваша программа запрашивает первый номер, затем запрашивает возврат каретки (вы думали, что здесь запрашивается номер, и вводите один, ваш «второй» номер), а затем запрашивает второй номер (третий номер для вас, но это scanf() примет второй, который вы ранее ввели), а затем для третьего номера (четвертый для вас, но это scanf() примет предыдущий третий введенный номер). Это 4 ввода от пользователя, и это то, что вас смутило.

Чтобы попытаться объяснить, что происходит с вашим scanf (), как у вас изначально, я написал программу, основанную на вашей, но с несколькими дополнениями:

#include <stdio.h>

int main()
{
int n,i,c;

for(i=0;i<=2;i++)
{
printf ("  scanf #%d (%%d) \n", i+1);
scanf("%d",&n);
printf ("  Read: %d\n",n);
c = getchar();
printf ("  Last character in input buffer: %.2X\n", c);
printf ("  scanf #%d (space and \\n) \n", i+1);
scanf(" \n"); /* or \t or just the space, or just \n */
c = getchar();
printf ("  Last character in input buffer: %.2X\n", c);
ungetc (c, stdin);
}
return 0;
}

Каждый раз, когда программа останавливается, пользователь вводит число: 1,2,3,4, … Последовательность getchar/ungetch заглядывает в буфер ввода, чтобы увидеть, что будет первым scanf() найду. Я также разделил ваш scanf() на два вызова: первый с использованием %d а второй с использованием остальной части строки формата (пробел и / или \n). Обратите внимание, что \ n рассматривается как пробел. На самом деле, оба являются частью так называемого пустые символы так что любой из них ведет себя одинаково, и более одного пробела ведет себя так, как будто есть только один пробел)

Вот что происходит (цифры слева — это цифры, которые я ввожу с клавиатуры):

  scanf #1 (%d)
1
Read: 1
Last character in input buffer: 0A
scanf #1 (space and \n)
2
Last character in input buffer: 32
scanf #2 (%d)
Read: 2
Last character in input buffer: 0A
scanf #2 (space and \n)
3
Last character in input buffer: 33
scanf #3 (%d)
Read: 3
Last character in input buffer: 0A
scanf #3 (space and \n)
4
Last character in input buffer: 34
END OF PROGRAM

Сравните этот вывод с этим:

  scanf #1 (%d)
1 2 3 4  <-- I enter 4 numbers at the first prompt, instead of one at a time
Read: 1
Last character in input buffer: 20
scanf #1 (space and \n)
Last character in input buffer: 32
scanf #2 (%d)
Read: 2
Last character in input buffer: 20
scanf #2 (space and \n)
Last character in input buffer: 33
scanf #3 (%d)
Read: 3
Last character in input buffer: 20
scanf #3 (space and \n)
Last character in input buffer: 34
END OF PROGRAM
8

Другие решения

измените цикл for на, тогда вы можете ввести 4 значения

for(i=0;i<=3;i++)
{
scanf("%d \n",&n);
fprintf(fptr,"%d ",n);
}
1

попробуй это

 #include <stdio.h>
main()
{
int n,i;
FILE *fptr;
fptr=fopen("f3.txt","w");
if(fptr==NULL)
{
printf("Error!");
exit(1);
}
printf("Enter n: ");
for(i=0;i<=3;i++)
{
scanf("%d \n",&n);
fprintf(fptr,"%d ",n);
}
fclose(fptr);
return 0;
}
1

Ваш код принимает только 3 значения, а не 4.

для (я = 0; я<= 2; я ++)

вышеуказанный цикл выполняется для 0, 1 и 2, то есть 3 раза.

0

for(i=0;i<=2;i++) только 3 раза, измените его на for(i=0;i<4;i++) и ответ на ваши правки :: изменить scanf("%d \n",&n); в scanf("%d",&n); (определите разницу в пространстве после %d).

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector