SIGSEGV podczas wyświetlania połowy wprowadzonego napisu

0

Witam! Od wczoraj zmagam się z zadaniem wypisania połowy wprowadzonego ciągu liter (zawsze parzysta liczba) i po wielu zastanowieniach nie mam pojęcia czemu dostaję błąd! Poproszę o pomoc w zrozumieniu :)

 #include <stdio.h>

int main(void)
{
    char nap[1100],ch;
    int t,i,j;
    
    scanf("%d",&t);
    ch=getchar();
    for(t;t>0;t--){
        j=0;
        do{
            nap[j]=getchar();
            j++;
        }while(nap[j-1]!='\n');
        for(i=0;i<j/2;i++)putchar(nap[i]);
        printf("\n");
    }
    return 0;
}
0
  1. Czemu nie wczytasz tego przez scanf("%s",nap) tylko robisz tu takie cuda na kiju?
  2. Jesteś pewien że wejście ma mniej niż 1100 znaków?
0
Shalom napisał(a):

... scanf("%s",nap) ...
Powstrzymam się od komentarza ...

scanf("%1099s",nap);

0

Aaaa bo nie wspomniałem :)
Zadanie ma mały limit czasu, i na scanf chyba bym się nie zmieścił... Tak wyczytałem, że putchar i getchar są szybsze od scanf i printf.

PS. Limit jest do 1000 znaków, także na wszelki wypadek dodałem 100 :)
PS2. Gdzie indziej mi napisali, że coś nie tak jest z "j"w pętli do...while, ale za nic w świecie nie potrafię wydedukować co...

1

Podejrzewam że ostatni wiersz nie kończy się enterem tylko od razu jedzie EOF.
Program niżej robi to samo co twój ale znacznie szybciej.

#include <stdio.h> 
int main()
  {
   static char nap[1100];
   int t,i,k; 
   scanf("%d ",&t);
   for(;t--;printf("\n")) for(i=k=0;((nap[i++]=getchar())!='\n')&&((nap[i++]=getchar())!='\n');) putchar(nap[k++]);
   return 0;
  }
0

Dziękuję! Teraz poszło :) Rzeczywiście, dużo szybciej zrobione! A czemu jest taka duża różnica między static char a char? Bo spróbowałem na char i dalej SIGSEGV się pojawiał...

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