2012-09-26 36 views
0

所以这是我所有的程序代码的:最简单的C程序错误。 Linux安装已损坏?

#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 -o testprog.c 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 

我上通过的PuTTY SSH客户端 我最近安装了0MQ库中的虚拟框和访问运行Ubuntu 12.04,但我不认为这是造成错误。

如果有人有解决方案,请让我知道。 谢谢。

+0

请不要键入结构。 – 2012-09-26 16:56:00

+1

@BlankXavier:请不要推荐丑。 :) – cHao

回答

5

我想你想在你的格式字符串中使用%u而不是%c

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

%u需要一个无符号整数作为输入,并且它会在打印之前将整数转换为字符串。

我建议您阅读tutorialreference关于printf样式的格式字符串以熟悉许多格式说明符之间的区别。

+3

输出Ctrl-E(字符代码5)是导致“PuTTYPuTTYPuTTY”垃圾的原因。 PuTTY用它的名字回复每个Ctrl-E(或者用你配置它响应的任何其他字符串,显然......但默认是它的名字)。 – cHao

0

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

如果您想将unsigned char作为小整数处理,则需要使用合适的格式代码(如%u)将其打印出来。

+0

当然。整个项目几乎没有意义。只是太搞清楚我做错了什么。感谢球员的帮助 – PogoMips

0

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