简单的C程序最奇怪的错误。 Linux安装损坏了吗?

时间:2012-09-26 16:43:47

标签: c linux ubuntu putty ioerror

所以这就是我的所有程序代码:

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

typedef struct {
    unsigned char adr;
    unsigned char type;
} stru;

int main (int argc, char *argv[]){

    while(1){

    stru data;

    data.adr = 5;
    data.type = 4;

    printf("Address: %c, Type: %c \n", data.adr, data.type);

    }

    return 0;   
}

我用“gcc testprog.c -o testprog”编译了它。

输出如下:

Address: , Type:
Address: , Type:
Address: , Type:
Address: , Type:
Address: , Type:
Address: , Type:
Address: , Type:
Address: , Type:
Address: , Type:
Address: , Type:
Address: , Type:
^CAddress: , Type:
PuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTYPuTTY^C

我在Virtual Box上运行Ubuntu 12.04并通过PuTTY SSH客户端访问它 我最近安装了0MQ库,但我认为这不会导致错误。

如果有人有解决方案,请告诉我。 谢谢。

3 个答案:

答案 0 :(得分:5)

我认为您希望在格式字符串中使用%u而不是%c

%c将输入解释为ASCII character值,因此使用%c打印4或5将打印出控制字符范围内的内容。打印出控制字符可能是导致输出底部出现所有奇怪内容的原因。

%u期望无符号整数作为输入,它会在打印前将整数转换为字符串。

我建议您在printf样式格式字符串上阅读tutorialreference,以熟悉许多格式说明符之间的差异。

答案 1 :(得分:0)

无限循环看起来毫无意义。

如果您想将unsigned char视为小整数,则需要使用合适的格式代码打印,例如%u

答案 2 :(得分:0)

您当前正在使用%c说明符将值4和5打印为字符。由于4和5不是可打印的Ascii字符,因此终端不显示任何内容。如果您希望打印“4”和“5”值,请将代码修改为printf("Address: %u, Type: %u \n", data.adr, data.type);,因为这些是无符号值。