我试图打印一个链接的字符列表,然后再创建一个函数将字符串复制到一个新的字符串然后将其反转并打印出来。我很困惑为什么这只打印出整数,以及如何反转字符串。这是我的代码:
#include<stdlib.h>
#include<stdio.h>
struct list_el
{
char val;
struct list_el * next;
};
typedef struct list_el item;
int main()
{
item * curr, * head;
int i;
head = NULL;
for(i='i';i>='a';i--)
{
curr = (item *)malloc(sizeof(item));
curr->val = i;
curr->next = head;
head = curr;
}
head = NULL;
while(curr)
{
printf("%d\n", curr->val);
curr = curr->next ;
}
return 0;
}
答案 0 :(得分:1)
%d
仅按定义打印数值。如果要打印其他内容,请使用其他格式字符串(例如%c
)。
更好,根本不使用printf()
,但考虑使用更简单的内容(putc()
?)
答案 1 :(得分:0)
您需要使用%c
打印带printf
的字符。 %d
用于打印整数。
有关printf
格式字符串的详细信息,请访问the Wikipedia article about this.
答案 2 :(得分:0)
要打印由val
表示的字符,请使用"%c"
要打印val
表示的数值,请使用"%d"
。
char
,short
,int
,unsigned
等所有具有各种范围的整数类型。
当代码使用格式指令(如"%d"
,%x
或"%c"
和printf()
)来打印其中一种类型时,不同的结果是合适的,并且会出现不同的输出。注意:格式之后的参数通过usual type promotions。
// Example assuming ASCII encoding
char a = 'A';
printf("%c\n", a); // prints A
printf("%d\n", a); // prints 65
printf("%x\n", (unsigned) a); // prints 41
还有其他问题需要考虑,特别是对于long
和long long
,但这是首发。