Program zliczający znaki odstępu, tabulacji i nowego wiersza - dziwny wynik.

0

Witam, miałem za zadanie do napisania program jak w temacie, czyli zliczający znaki odstępu, tabulacji i nowego wiersza ale wynik programu jaki napisałem jest dość dziwny. Poniżej kod programu:

#include <stdio.h>

/*
 * program zliczający znaki odstępu,
 * tabulacji i nowego wiersza
 */

int main()
{
	int c, ns, nt, nl;

	// zliczanie znaków odstępu
	ns = 0;
	while((c = getchar()) != EOF){
		if(c == ' '){
			++ns;
		}
		printf("%d\n", ns);
	}

	// zliczanie znaków tabulacji
	nt = 0;
	while((c = getchar()) != EOF){
		if(c == '\t'){
			++nt;
		}
		printf("%d\n", nt);
	}

	// zliczanie znaków nowego wiersza
	nl = 0;
	while((c = getchar()) != EOF){
		if(c == '\n'){
			nl++;
		}
		printf("%d\n", nl);
	}
	return 0;
}
 

Teraz po pierwsze nie wiem czy program jest poprawny, mimo że nie ma błędów. Po drugie wynik po wpisaniu: bla bla bla bla wygląda tak:

0
0
0
1
1
1
1
2
2
2
2
3
3
3
3
3 

Jak powinien wyglądać ów program poprawnie ?

0

Nie jest dziwny. Jest normalny. Policz ile razy zostanie wywołana funkcja printf() a będziesz znał odpowiedź na twoje pytanie.

0

ad1. w jednej pętli
ad2. zliczać, a nie wypisywać zaraz jak się napatoczą

0

Ja napisałem ten program tak:
#include <stdio.h>

main(){
int c, nl, tab, ns;

   nl=0;
   tab=0;
   ns=0;
   
   while((c=getchar())!=EOF){
   if(c=='\n')                   
               ++nl;
   
   if(c=='\t')
               ++tab;
               
   if (c==' ')
              ++ns;
   }
   printf("NL=""%d", nl);
   printf(", SPACE=""%d", ns);
   printf(", TAB=""%d", tab);

getch();
}

0
#include <stdio.h>
#include <string.h>

int main()
  {
   int ch;
   const char chr[]=" \t\n";
   unsigned pos,tab[3]={0};
   while((ch=getchar())!=EOF) if((pos=strchr(chr,ch)-chr)<3) ++tab[pos];
   printf("SPACE=%u, TAB=%u, NL=%u\n",tab[0],tab[1],tab[2]);
   while(getchar()!='\n') {}
   return 0;
  }

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