Wczytywanie znaków do bufora z stdin.

Wczytywanie znaków do bufora z stdin.
EM
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3
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:

Kopiuj
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...

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
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?

EM
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3
0

Piszę pod linuxem.

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

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
1
Kopiuj
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

EM
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3
0

Dzięki wielkie! :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.