2013-02-03 52 views
4

我正在尝试做一些功课,并且遇到问题。我的作业是C++数组中的问题

•使用for循环打印数组的内容。

输出应该出现这样的:ARRAY

作者

打印内容A B C d E F G H I J K L M N 2 O P Qř式T U V W X YŽ

我有我的代码,它是工作。但是,在我的字母表末尾出现了一堆随机字符和符号。有什么你们看到我做错了吗?

这是我的代码。

#include <iostream> 
using std::cin; 
using std::cout; 
using std::endl; 

// main FUNCTION BEGIN PROGRAM EXECUTION 
int main() 
{ 
// ALPHABET ARRAY DECLARATIONS 
char Letters [26] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}; 


for (int i = 0; i < 27 ; i++) 
{ 
cout<< "PRINTING CONTENTS OF ARRAY" << endl; 
cout<< "===============================" << endl; 
cout<< Letters << " "; 
cout<< endl; 
break; 
} 
return 0 ; 
} // ***END main FUNCTION*** 

基本上这个问题简单地说就是它像我想要的那样打印A-Z,但也打印Z后的一堆随机符号。任何想法?由于我是新手,我相信这可能很简单。 在此先感谢!

+0

您有关断由 - 一个错误。 – Rapptz

+1

但除此之外,对吗?杰克实际上并没有循环。 '<<'是否需要一个以空字符结尾的字符数组? – Thomas

+4

你也没有理由在里面有'break'。你知道这个打破了for循环吗? – Rapptz

回答

1

要删除“的随机字符和符号串”,加NULLetters末:

char Letters [] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 
        'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 
        'U', 'V', 'W', 'X', 'Y', 'Z', 0}; 

这是将打印的字母倍,这可能不是什么你要。 编辑:前面的陈述错误 - 我错过了你的break;

+1

这实际上解决了我的问题非常感谢!我转换了信件[26]至[27]加了0,它的功能就像一个魅力!我很感激! – Jack

+0

@Jack如果最终得到27个打印输出而不是一个,这怎么可能解决您的问题? ;-) – dasblinkenlight

+1

@dasblinkenlight,break语句:( – chris

0

数组索引开始从0N,你必须在信件26个字符,索引开始从025

cout<< "PRINTING CONTENTS OF ARRAY" << endl; 
cout<< "===============================" << endl; 

for (int i = 0; i < 26 ; i++) 
{ 
    cout<< Letters[i] << " "; 
} 
cout<< endl; 

break;通常用来打破一定条件下forwhile循环。你for循环finishes smoothly, you don't need a break`在循环中。

+0

感谢billz,我改变了它,但它仍然给我同样的问题。在Z之后,它正在打印一堆符号。 – Jack

+0

@Jack,对不起,我有错别字,我修复了它 – billz

4

当您将一个字符数组传递给输出流时,该数组必须以null结尾。你的数组不是null结尾;这就是为什么你最终会得到额外的垃圾。

然而,这是不是你的解决方案的主要问题:你需要指数字母,就像这样:

cout << Letters[i] << " "; 

最后,26个字母,索引去零到25,所以循环延续条件应该是i < 26i != 26i <= 25

+0

谢谢。约瑟夫评论告诉我如何去做你说的!我感谢帮助! – Jack

+1

啊我明白你的意思了!我会检查一下,看看会发生什么。我得到了期望的打印输出,但从我的理解中仍然是错误的。^_^ – Jack

+0

我做了修改Letters [i]和i <26,它只是简单地打印A现在 – Jack

1

在数组末尾添加一个空值。 c函数检查空字符是否终止。用C

0

字符数组++被空终止,当你intialise阵列

char Letters [26] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}; 

您没有考虑到您需要1个更多的空间帐户从基于零的索引,因此开始“\ 0”,以终止阵列,其会导致不确定的行为

由于打印信件[0]到信件[26],则再次导致在编写信件[26]未定义的行为因此垃圾值的出现