Problem z kodem język C

Problem z kodem język C
Daim123
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 62
0

Cześć dopiero zacząłem przygodę z językiem c i mam takie zadanie, ono było zapewne wałkowane wielokrotnie na forum.
treść zadania:

Napisz program zliczający znaki odstępu, tabulacji i nowego wiersza.

napisałem taki kod:

Kopiuj

include <stdio.h>

int main() {
    
    int a,s,t,n,tabulacja=0, nowywiersz=0, spacja=0;
    
    s = ' ';
    t = '\t';
    n = '\n';
    
    
 while((a=getchar())!=EOF)
    {
        if(a == s)
        {
            ++spacja;
        }
        else if(a == t)
        {
            ++tabulacja;
        }
        else if (a == n)
        {
            ++nowywiersz;
        }
  
    }


    printf(" \n Ilość spacji: %d \n Ilość tabulacji: %d \n Ilość nowych wierszy: %d",spacja, tabulacja, nowywiersz);
         
return 0;
}

Problem jest taki, że program nic nie wypisuje, wydaję mi się, że to wina tego, że program cały czas działa tzn, że mogę do niego cały czas coś dopisywać, ale nie wiem jak to zmienić.

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
0

Ctrl+Z na windowsie, Ctrl+D na linuksie.

Btw: nie musisz przypisywać stałych do zmiennych, możesz bezpośrednio do nich porównywać.

Daim123
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 62
0

a w xcode?

ok już wiem jak na linuxie

AK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3561
2
kq napisał(a):

Ctrl+Z na windowsie, Ctrl+D na linuksie.

Dając background do w/w kombinacji chodzi o zakończenie (zamknięcie) domyślnego pliku wejściowego, którym jest konsola.
Alternatywnym sposobem na zasilenie programu jest przekierowanie istniejącego już wcześniej pliku

Kopiuj
type plikzdanymi.txt | program.exe (windows)

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

Po wygodnej definicji danych mamy łatwo rozszerzalny jednowierszowiec

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

int main() 
{
   static const char signs[]=" \t\n",*msg[]={"spacji","tabulacji","enterow"};
   const char *pos;
   int i,ch,cnt[sizeof(msg)/sizeof(*msg)]={0};
   while((ch=getchar())!=EOF) if((pos=strchr(signs,ch))!=NULL) ++cnt[pos-signs];
   for(i=0;i<sizeof(msg)/sizeof(*msg);++i) printf("Ilość %s: %d\n",msg[i],cnt[i]);
   return 0;
}

lub :

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

int main() 
{
   static struct { const char chr,*msg; } tb[]={{' ',"spacji"},{'\t',"tabulacji"},{'\n',"enterow"}};
   int i,ch,cnt[258]={0};
   while((ch=getchar())!=EOF) ++cnt[(unsigned char)ch];
   for(i=0;i<sizeof(tb)/sizeof(*tb);++i) printf("Ilość %s: %d\n",tb[i].msg,cnt[(unsigned char)tb[i].chr]);
   return 0;
}

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.