Автор Тема: Въпрос относно getchar() и stdin  (Прочетена 1046 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

Drakonov

  • Гост
Въпрос относно getchar() и stdin
« -: 01 Ноември 2011, 16:05:24 »
Здравейте!
Имам следния код:
#include <stdio.h>

int main() {
int x = 0, sev = 0, nsev = 0;
char c = 'y';

while ((c == 'y') || (c == 'Y')) {
printf("Vavedete chislo: ");
scanf("%d", &x);

if ((x % 7) == 0) {
sev += x;
nsev++;
}

printf("\nJelaete li da prodaljite (y/n) ? ");
getchar();
c = (char)getchar();
}

if(nsev == 0){
printf("\nNe bqha vavedeni chisla delqshti se na 7!");
}else{
printf("\nSredno aritmetichno na chislata delqshti se na 7 e: %f",(float)sev/nsev);
}
return 0;
}

След като въведа число, във входния буфер остава '\n' , и при посладващ getchar(), вместо да въведа нещо и да натисна Enter, getchar() прочита '\n' от входния буфер и програмата продължава  >:( . намерих временно решение, като използвам два getchar()-a, като първея "поглъща"  '\n' , а втория приема моя вход. Та въпроса ми е как да изчистя входния буфер (stdin) преди да използвам getchar()?

Stilgar

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 0
  • -Получени: 42
  • Публикации: 1406
    • The Sietch
Re: Въпрос относно getchar() и stdin
« Отговор #1 -: 01 Ноември 2011, 18:09:37 »
http://stackoverflow.com/questions/5240789/scanf-leaves-the-new-line-char-in-buffer

Съветвам те да не отделяш твърде много внимание на глупости като функции за работа с конзолата. На никой не му пука за тях освен за тея дето пишат Lunix. Пък и дори да решиш да ставаш такъв винаги може да ги научиш следварително. Научи ги дотолкова доколкото да може да си правиш някакъв output за истинския код. Това колко пъти ще викнеш getchar са някакви маловажни глупости на тоя етап.

Drakonov

  • Гост
Re: Въпрос относно getchar() и stdin
« Отговор #2 -: 01 Ноември 2011, 18:24:08 »
Благодаря много!!!  Въпросът е решен.

#include <stdio.h>

int main() {
int x = 0, sev = 0, nsev = 0;
char c = 'y';

while ((c == 'y') || (c == 'Y')) {
printf("Vavedete chislo: ");
scanf("%d", &x);

if ((x % 7) == 0) {
sev += x;
nsev++;
}


do{
printf("\nJelaete li da prodaljite (y/n) ? ");
scanf("\n%c",&c);
}while((c != 'y')&&(c != 'n'));
}

if(nsev == 0){
printf("\nNe bqha vavedeni chisla delqshti se na 7!");
}else{
printf("\nSredno aritmetichno na chislata delqshti se na 7 e: %f",(float)sev/nsev);
}
return 0;
}
« Последна редакция: 01 Ноември 2011, 18:31:02 от Kalessin »