Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Łańcuchy, funkcja atoi, spoj

Ostatnio zmodyfikowano 2017-12-30 00:54
Autor Wiadomość
Bercik97
Temat założony przez niniejszego użytkownika
Łańcuchy, funkcja atoi, spoj
» 2017-12-29 19:01:33
Witam, postanowiłem sobie zrobić zadanie na spoju http://pl.spoj.com/problems/JPESEL/ i mam problem z moim kodem, otóż nie wiem dlaczego nie działa mi to
if( pesel == '\n' ) continue;
 tak jak chce czyli, że pomija mi znak nowej linii. Chodzi o to, że jak wpisze np liczbę testów 2, i w nast. linijce wszystkie liczby czyli, np 44051401458 a nie osobno każda w innej linii to program liczy mi poprawnie ale jakby użytkownik chciał właśnie wprowadzić każdą liczbę w osobnych liniach to jest wtedy lipa, i jeszcze program kończy od razu swoje działanie zamiast zacząć drugi test. Pomoże ktoś? Oto mój kod:
C/C++
#include <stdio.h>
#include <stdlib.h>
#define SIZE 11

int main()
{
    int i, j, t, suma = 0, liczba[ SIZE ];
    char pesel[ SIZE ];
    scanf( "%d", & t );
    for( i = 0; i < t; i++ )
    {
        fflush( stdin );
        for( j = 0; j <= SIZE; j++ )
        {
            scanf( "%c", & pesel );
            if( pesel == '\n' )
                 continue;
            else {
                printf( "%d\n", atoi( pesel ) );
                liczba[ j ] = atoi( pesel );
                suma += atoi( pesel );
            }
        }
        if( suma < 0 )
             continue;
        else
        {
            suma = 0;
            suma += liczba[ 0 ] + liczba[ 4 ] + liczba[ 8 ] + liczba[ 10 ] +
            ( 3 * liczba[ 1 ] ) +( 3 * liczba[ 5 ] ) +( 3 * liczba[ 9 ] ) +
            ( 7 * liczba[ 2 ] ) +( 7 * liczba[ 6 ] ) +( 9 * liczba[ 3 ] ) +( 9 * liczba[ 7 ] );
            if( suma % 10 == 0 )
                 puts( "D" );
            else
                 puts( "N" );
           
        }
    }
   
    return 0;
}
P-168213
mateczek
» 2017-12-29 19:09:39
pesel jest c-stringiem a porównujesz ze znakiem ??
poza tym skoro na spoju jest podane, że masz 20 testów to masz 20 testów. I nie musisz robić nadprogramowych sprawdzeń Pozatym do testu ostaniej cyfry sumy nie trzeba zamieniać ascii na int. Wykomentowałem zbędny kod
C/C++
#include <stdio.h>
#include <stdlib.h>
#define SIZE 11

int main()
{
    int i, j, t, suma = 0;
    char liczba[ SIZE + 1 ];
    scanf( "%d", & t );
    for( i = 0; i < t; i++ )
    {
        // fflush( stdin );
        //for( j = 0; j <= SIZE; j++ )
        //{
        scanf( "%s", & liczba );
        //   if( pesel == '\n' )
        //        continue;
        //    else {
        //       printf( "%d\n", atoi( pesel ) );
        //       liczba[ j ] = atoi( pesel );
        //        suma += atoi( pesel );
        //    }
        //}
        // if( suma < 0 )
        //      continue;
        // else
        //{
        suma = liczba[ 0 ] + liczba[ 4 ] + liczba[ 8 ] + liczba[ 10 ] +
        ( 3 * liczba[ 1 ] ) +( 3 * liczba[ 5 ] ) +( 3 * liczba[ 9 ] ) +
        ( 7 * liczba[ 2 ] ) +( 7 * liczba[ 6 ] ) +( 9 * liczba[ 3 ] ) +( 9 * liczba[ 7 ] );
        if( suma % 10 == 0 )
             puts( "D" );
        else
             puts( "N" );
       
        // }
    }
   
    return 0;
}
P-168214
Bercik97
Temat założony przez niniejszego użytkownika
» 2017-12-30 00:54:53
LOL. Nie wiem po co ja próbuje tak kombinować, dzięki. Po prostu na spoju w niektórych zadaniach miałem tak, że nie było podanego warunku i jak nie spełniłem wszystkich możliwych warunków to spoj mi nie zaliczał, myślałem, że tutaj też tak będzie dlatego tak pisałem ten kod.. Dzięki jeszcze raz.
P-168233
« 1 »
  Strona 1 z 1