1

我很困惑为什么 cout 语句没有在函数 find_depth 中打印数组 c_braces_array 的内容;

我要做的就是传递一个数组并打印它的值。

#include <iostream>

int find_depth(char c_braces_array[], int no_of_braces)
{
    for(int i=0; i<no_of_braces; i++)
    {
        std::cout<<"val is:"<<c_braces_array[i]<<"F\n";
    }
    return 0;
}

int main()
{
    char braces[100] = {0};
    int ret_val = find_depth(braces, 100);
    std::cout<<ret_val;
    system ("pause");
    return 0;
}

输出/输出:

...
val is: F
val is: F
val is: F
val is: F
val is: F
0按任意键继续。. .

在此处输入图像描述

编辑:我将数组初始化为包含主中的所有 0。所以我期待 0 被打印出来。我不确定 O(如哦!)的事情在哪里出现。有人可以解释一下吗?

我期待这个o / p

值是:0 F

编辑 - 2:伙计们,谢谢。感谢您指出错误。我也不明白为什么下面的行只用'a'而不是整个数组初始化大括号[0]。什么是初始化整个数组而不是运行 for 循环的正确方法。

现在我的代码如下所示。

main(){
        ...
    char a_char = 'a';
    char braces[100] = {a_char};
      }

find_depth(..)
{
     ...
    std::cout<<"val is:"<<c_braces_array_ptr[i]<<"X\n";
}

O/P
内部 main:a
val is:aX
val is:X
val is:X
val is:X
val is:X
val is:X
val is:X
val is:X

4

3 回答 3

2

尝试:

std::cout<<"val is:"<< (int)(c_braces_array[i]) <<"F\n";
于 2012-06-24T20:28:28.843 回答
2

似乎您的大部分问题都已得到解答,但为了完整起见,让我们回顾一下。

  1. 没有在您期望的地方打印的原因是您已经初始化了数组以包含所有0值。A0是 c 字符串的空终止符,这意味着它标志着字符串的结尾。它也是一个非打印字符,我们不想以打印字符结束每个 c 字符串,这是没有意义的。如果你想要 ASCII 字符 0,你需要'0'它是 decimal 48。(见:http ://www.asciitable.com/ )
  2. 当用数据声明和初始化一个数组时,它将用初始化列表中的相应数据填充每个元素。例如;char myArray[10] = {'a', 'b', 'c'};会用这些值初始化数组,myArray[0] = 'a'; myArray[1] = 'b'; myArray[2] = 'c';但是所有其他元素呢?它不假设您想要重复一个元素,它还假设您不想要垃圾。相反,它用值填充数组0
  3. 我假设您的下一个问题可能是“我怎样才能用不同的值填充它?” 如果不明确说明每个元素的每个值,就无法更改数组的初始化方式。但是- 您可以设置每个值。

    unsigned int i;
    char myArray[100]; // Don't waste time initializing any data yet.
    
    for(i = 0; i < 100; ++i)
    {
         myArray[i] = 'a'; // Set each element to 'a' - Now it's initialized!
    }
    

    另一种选择是使用memset();,它是<string.h>. 这会将每个元素设置为给定值,并且对于您的情况可能是您所需要的。这样做是这样的:

    #include <string.h>
    
    char myArray[100]; // Declare, don't initialize.
    memset(myArray, 'a', 100); // Initialize by setting each value to 'a'!
    

希望这有帮助!只是练习和玩弄 c 字符串以更好地理解它们可能会很有用。'0'请注意,和之间有区别00只是零的值,而'0'零字符的字符值。(阅读:)48。所以如果你想 memset 打印 0,你必须memset(myArray, '0', 100);

于 2012-06-25T00:56:35.807 回答
0

它正在尝试打印您的变量值。该值为 0,而不是'0'。0 不是可打印字符,因此无法打印任何内容。

于 2012-06-24T20:27:59.217 回答