Problem z kodem język C

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:


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

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

0

a w xcode?

ok już wiem jak na linuxie

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

type plikzdanymi.txt | program.exe (windows)

0

Po wygodnej definicji danych mamy łatwo rozszerzalny jednowierszowiec

#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 :

#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;
}

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