我在Eclipse中使用CDT插件创建了两个模板项目(一个是C项目,另一个是C ++),并编译了两个非常相似的项目(对我而言),但我得到了完全不同的控制台输出。为什么这个输出如此不同? C代码:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int numbers[5];
int * p;
p = numbers; *p = 10;
p++; *p = 20;
p = &numbers[2]; *p = 30;
p = numbers + 3; *p = 40;
p = numbers; *(p+4) = 50;
int n;
for (n=0; n<5; n++)
printf("%c ",numbers[n]);
return EXIT_SUCCESS;
}
输出 一些垃圾
C ++代码:
#include <iostream>
using namespace std;
int main() {
int numbers[5];
int * p;
p = numbers; *p = 10;
p++; *p = 20;
p = &numbers[2]; *p = 30;
p = numbers + 3; *p = 40;
p = numbers; *(p+4) = 50;
for (int n=0; n<5; n++)
cout << numbers[n] << " ";
return 0;
}
输出
10,20,30,40,50
答案 0 :(得分:23)
您正在C中打印int
char
。
更改
printf("%c ",numbers[n]);
到
printf("%d ",numbers[n]);
答案 1 :(得分:8)
您打印整数的ASCII值。尝试
printf("%i", numbers[n])
而不是
printf("%c", numbers[n])
答案 2 :(得分:8)
您尝试将数字输出为字符,从而导致奇数输出。 这段代码对我来说很好。
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int numbers[5];
int * p;
p = numbers; *p = 10;
p++; *p = 20;
p = &numbers[2]; *p = 30;
p = numbers + 3; *p = 40;
p = numbers; *(p+4) = 50;
int n;
for (n=0; n<5; n++)
printf("%d ",numbers[n]);
return EXIT_SUCCESS;
}
请注意%d,而不是%c
答案 3 :(得分:1)
您需要%d来打印整数,%c需要在C
中打印charhttp://www.cplusplus.com/reference/cstdio/printf/
请看下面的陈述
printf("%c ",numbers[n]);
您正在使用%c来打印int,这是错误的。
具体来说,printf是从C借来的,有一些局限性。 printf最常见的限制是类型安全性,因为它依赖于程序员将格式字符串与参数正确匹配。来自varargs环境的第二个限制是您无法使用用户定义的类型扩展行为。 printf知道如何打印一组类型,这就是你将从中获得的所有内容。尽管如此,它可以用于少数事情,使用printf格式化字符串比使用c ++流更快更简单。