Netbeans 8.1 C调试器错误?

时间:2015-12-04 22:20:45

标签: c debugging netbeans gdb netbeans-8.1

这是我的代码,它将十六进制数字(以字符串形式给出)转换为十进制:

#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 个答案:

答案 0 :(得分:1)

有一种解决方法: 在Project PropertiesRunExternal Terminal选择Console Type。 (这是MinGW所必需的。)

使用Cygwin时,问题是Netbeans使用选定的32位bin目录以某种方式使用64位安装。在Options|C/C++|Build Tools中选择64位Cygwin bin目录后,调试器也在使用Internal Terminal选项。

答案 1 :(得分:0)

  

我错过了某些事吗

是的:当您step进入fgets时,您的程序已停止(因此无法接受任何输入)。

您要做的是next超过fgets。这将阻止输入程序。输入数字后,程序将解锁,并在下一行由于(临时)断点而再次停止。

P.S。您的val实现可以替换为几行:

if ('0' <= c && c <= '9') return c - '0';
if ('a' <= c && c <= 'f') return c - 'a' + 10;
return -1;