Что-то странное происходит во время отладки в CLion, когда работает нормально - PullRequest
0 голосов
/ 26 октября 2018

Я студент колледжа, изучаю C. Я использую CLion 2018.2.5 в macOS 10.14 mojave.

Это простая проблема "A плюс B", вот мой код:

#include <stdio.h>
int main() {
    int a, b;
    while (scanf("%d%d", &a, &b) != EOF) {
        printf("%d", a + b);
    }
    return 0;
}

ПРИМЕЧАНИЕ: после "% d" НЕТ новой строки. \ 1006 *

↓↓↓↓↓↓↓↓↓↓↓↓↓ Вывод, нажав Отладка в CLion:

(Я набрал «4 пробела 5, возврат 6 пробела 7, команда возврата + D (EOF)»)

/Users/i/CLionProjects/C_PersonalPractice/cmake-build-debug/sum
4 5
6 7 
^D
913
Process finished with exit code 0

↓↓↓↓↓↓↓↓↓↓↓↓ Вывод, нажав Run в CLion:

(я набрал «4 пробела 5, возврат 6 пробела 7, команда возврата + D (EOF)»)

/Users/i/CLionProjects/C_PersonalPractice/cmake-build-debug/sum
4 5
96 7
13^D

Process finished with exit code 0

↓↓↓↓↓↓↓↓↓↓↓↓↓ Вывод GCCв терминале:

(я набрал: «4 пробела 5, возвращение 6 пробела, 7 управление возвратом + D (EOF)»)

Last login: Fri Oct 26 13:35:34 on ttys005
MacBook-Pro:~ i$ /Users/i/sum ; exit;
4 5
96 7
13logout
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.

[进程已完成]

В результате отладки я обнаружил, что IDE, кажется,отображать результат вычисления вместе, а не отображать его сразу после ввода двух чисел.

Это особенность или ошибка в отладке CLion?

Обновление:

Этот код может бытьОК успешно во время отладкипока я набираю символ новой строки '\ n' после "% d".

Кроме того, сегодня я столкнулся с еще одной похожей ошибкой, связанной с EOF:

отправка EOF на стандартный вводв Clion IDE ;

выполнить после EOF в C ;

, что было подтверждено JetBrains: https://youtrack.jetbrains.com/issue/CPP-5704

Его решение -отключить "run.processes.with.pty" в реестре в CLion.


Я думаю, что эта проблема может быть сложной, если учитывать все перечисленные факторы: отладка или выполнение, ввод новой строки или нет, отключениеили включите "run.processes.with.pty".

1 Ответ

0 голосов
/ 26 октября 2018

Я думаю, вам нужно очистить оставшиеся до следующего цикла.

while( 1 )
{
    scanf("%d%d", &a, &b);
    scanf("%*[^\n]%*c");
    printf("%d\r\n", a+b);
}
...