4

我正在尝试做一些功课,但遇到了问题。我的作业是

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

输出应如下所示:

打印阵列内容

ABCDEFGHIJKLMNOPQRSTU VWXYZ

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

这是我的代码。

#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***

基本上,简单地说问题是它像我想要的那样打印 AZ,但还在 Z 之后打印一堆随机符号。有什么想法吗?因为我是新手,所以我相信这可能很简单。提前致谢!

4

5 回答 5

4

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

但是,这不是您解决方案的主要问题:您需要索引字母,如下所示:

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

最后,对于 26 个字母,索引从 0 到 25,因此循环继续条件应该是i < 26i != 26i <= 25

于 2013-02-03T03:49:22.367 回答
1

要删除“一堆随机字符和符号”,NUL请在末尾添加一个Letters

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};

这将打印26次字母表,这可能不是您想要的。编辑:之前的陈述错误——我错过了你的break;.

于 2013-02-03T03:49:13.907 回答
1

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

于 2013-02-03T03:54:34.590 回答
0

数组索引从0to开始N,Letters 中有 26 个字符,索引从0to开始25

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

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

break;通常用于在特定条件下中断for或循环。while你在循环中for循环finishes smoothly, you don't need abreak`。

于 2013-02-03T03:47:50.303 回答
0

C++ 中的 char 数组以空值结尾,并从基于零的索引开始,因此当您初始化数组时

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'};

您没有考虑到 '\0' 需要 1 个空间来终止导致未定义行为的数组

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

于 2013-02-03T06:45:09.013 回答