Программа работает на Dev-C ++, но не на GCC - PullRequest
0 голосов
/ 13 февраля 2011

Привет всем.Я написал эту программу для онлайн-конкурса.Он работает прекрасно на Dev-C ++ Bloodshed, но не работает с GCC.Конкурс требует все решения на основе компилятора GCC.

Он даже не ждет второго ввода.Программа отлично работала на Dev-C ++.Пожалуйста, помогите.

#include <stdio.h>

int testCases;

void runPgm()
{
    scanf("%d", &testCases);
    int array[testCases][2];
    char start[testCases];
    int i;
    for(i=0; i<testCases; i++)
    {
        scanf("%c %d %d", &start[i], &array[i][0], &array[i][1]);
    }
    for(i=0; i<testCases; i++)
    {
        printf("%c %d %d\n", start[i], array[i][0], array[i][1]);
    }
}

int main() {
    runPgm();
    return 0;
}

Вывод с GCC:

machine:~$ cc prog.c -lm  
machine:~$ ./a.out  
2
a 3 3

 0 -1080493616
a 3 3
machine:~$

1 Ответ

1 голос
/ 13 февраля 2011

После получения «testCases» вы используете клавишу «Enter», которая добавляет «\ n» в буфер.

Вы должны использовать getchar (), чтобы получить "\ n" из буфера. То же самое для scanf в цикле for

Ваш фиксированный код:

#include <stdio.h>
int testCases;


void runPgm()
{
    scanf("%d", &testCases);
    getchar();

    int array[testCases][2];
    char start[testCases];
    int i;
    for(i=0; i<testCases; i++)
    {
        scanf("%c %d %d", &start[i], &array[i][0], &array[i][1]);
        getchar();
    }
    for(i=0; i<testCases; i++)
    {
        printf("%c %d %d\n", start[i], array[i][0], array[i][1]);
    }
}

int main() {
    runPgm();
    return 0;
}

Кстати, определение массивов, как вы сделали, не совместимо с ANSI-C, и я не уверен, почему gcc с этим согласен. Для этого вы должны использовать динамическое размещение (например, malloc ())

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...