Wczytywanie znaków do bufora z stdin.

0

Cześć, mam taki problem. Mój program musi pobierać znaki ze standardowego wejścia. Mam bufor na 80 znaków. Jeżeli liczba znaków będzie mniejsza niż 80, to pętla czytająca znaki ma się zakończyć, program wykonuje się dalej, a potem znowu można wpisać znaki. Gdy 80 zostanie przekroczona, pętla czytająca znaki ma się zakończyć (wraz z 80 znakiem), program wykonuje się dalej, po czym reszta znaków jest wpisywana do bufora itd...

Mam coś takiego:

int i, ret, is_more = 0;
char Bufor[80];
do	
{
	if(is_more == 0)
		printf("> ");

	for(i=0; i<80; ++i) 
	{
		ret = scanf("%c", Bufor+i);
		if(ret == EOF) break;
	}
	
	if(ret != EOF)
		is_more = 1;
	else
		is_more = 0;

	/*dalsze działanie programu...*/
			
}while(1);
 

Niestety nie zwraca mi EOF, coś nie trybie właśnie w tamtym miejscu...

0

EOF zwróci jeżeli wciśniesz <ctrl-Z> na początku wiersza po czym <Enter> (pod windows'ami).
Czy nie prościej użyć fread do tego co robisz?

0

Piszę pod linuxem.

Może i prościej, ale znam tylko coś takiego. Dzięki za radę, zaraz coś na ten temat poszukam.

1
size_t sz;
char Bufor[80];
while((sz=fread(Bufor,1,sizeof(Bufor),stdin))>0)
  {
   /*dalsze działanie programu...*/
  }

Uwaga Bufor nie jest c-stringiem czyli nie jest zakończone '\0'
sz - ilość znaków

0

Dzięki wielkie! :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1