4

我在 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

4

4 回答 4

23

您正在intchar在 C中一样打印。

改变

printf("%c ",numbers[n]);

printf("%d ",numbers[n]);
于 2013-03-26T12:08:11.183 回答
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

于 2013-03-26T12:12:48.393 回答
8

您打印整数的 ASCII 值。尝试

printf("%i", numbers[n])

代替

printf("%c", numbers[n])
于 2013-03-26T12:09:50.587 回答
1

您需要 %d 打印整数和 %c 打印 C 中的字符

http://www.cplusplus.com/reference/cstdio/printf/

看看你下面的陈述

printf("%c ",numbers[n]);

您正在使用 %c 打印 int,这是错误的。

具体来说 printf 是从 C 中借来的,并且有一些限制。printf 最常见的限制是类型安全,因为它依赖于程序员将格式字符串与参数正确匹配。来自可变参数环境的第二个限制是您不能使用用户定义的类型扩展行为。printf 知道如何打印一组类型,这就是您将从中得到的全部内容。尽管如此,它可以用于少数几件事,使用 printf 格式化字符串比使用 c++ 流更快、更简单。

于 2013-03-26T12:15:34.213 回答