Ошибка отладчика Netbeans 8.1 C?

Вот мой код, который преобразует шестнадцатеричное число (заданное в строке) в десятичное:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int val(char);

int main() {
    char s[100];
    int sum = 0, mult = 1,i,len;
    printf("Hexadecimal number:\n");
    fflush(stdout);
    fgets(s,100,stdin);
    len = strlen(s);
    for (i = len-2; i >= 0; i--) {
        sum += val(s[i])*mult;
        mult *= 16;
    }
    printf("%d\n",sum);
    fflush(stdout);
    return (EXIT_SUCCESS);
}

int val(char c) {
    switch(c) {
        case '0': return 0;
        case '1': return 1;
        case '2': return 2;
        case '3': return 3;
        case '4': return 4;
        case '5': return 5;
        case '6': return 6;
        case '7': return 7;
        case '8': return 8;
        case '9': return 9;
        case 'a': return 10;
        case 'b': return 11;
        case 'c': return 12;
        case 'd': return 13;
        case 'e': return 14;
        case 'f': return 15;
        default: return -1;
    }
}

1. Я добавляю точку останова к int sum = 0, mult = 1,i,len;

2. Я начинаю отладку

3. Я использую Step Into - переменные отображаются справа

4. Я вступил в printf("Hexadecimal number:\n"); а также fflush(stdout); и это не отображается в консоли.

5. Стрелка рядом с fgets(s,100,stdin); Я вступаю в

6. Я больше не могу использовать степперы, я предполагаю, что это тот момент, когда я должен передать строку в stdin.

7. Я пытаюсь дать строку, ничего не происходит, я могу дать ее снова, ничего не происходит.


Другой пример:

1. Я добавляю точку останова к len = strlen(s); (после fgets)

2. Я начинаю отладку

3. Тот же результат при входе в fgets (предыдущий пример)


Программа работает нормально, если не отлаживается. Я пробовал Cygwin и MinGW тоже, тот же результат. Это ошибка или я что-то пропустил? Должен ли я сообщить об этом?

2 ответа

Решение

Существует обходной путь: в Project Properties, под Run Выбрать External Terminal для Console Type, (Это необходимо для MinGW.)


С Cygwin проблема заключалась в том, что Netbeans каким-то образом использовал 64-битную установку с выбранным 32-битным каталогом bin. После того, как я выбрал 64-битный каталог Cygwin bin в Options|C/C++|Build Toolsотладчик работал с Internal Terminal варианты тоже.

я скучаю по чему-то

Да, когда ты step в fgets, ваша программа остановлена (и, следовательно, не может принять любой ввод).

Что вы хотите сделать, это next над fgets, Это заблокирует программу при вводе. Как только вы введете свой номер, программа разблокируется и снова остановится из-за (временной) точки останова на следующей строке.

PS Ваша реализация val можно заменить всего несколькими строками:

if ('0' <= c && c <= '9') return c - '0';
if ('a' <= c && c <= 'f') return c - 'a' + 10;
return -1;
Другие вопросы по тегам