Visual studio(std :: cout)不打印我的变量值

时间:2012-06-24 20:21:37

标签: c++ visual-studio-2010 cout

我很困惑为什么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;
}

O / P:

  

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

enter image description here

编辑: 我初始化数组以包​​含main中的所有0。所以我期待打印0。我不确定O(就像在哦!)事物的上下文。有人可以解释一下吗?

我期待这个o / p

  

val是:0 F

编辑 - 2: 伙计们,谢谢。谢谢你指出了这个bug。 另外我不明白为什么以下行只用'a'而不是整个数组初始化大括号[0]。 WHat是初始化整个数组而不是运行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
内部主要:a val是:aX
val是:X
val是:X
val是:X
val是:X
val是:X
val是:X
val是:X

3 个答案:

答案 0 :(得分:2)

尝试:

std::cout<<"val is:"<< (int)(c_braces_array[i]) <<"F\n";

答案 1 :(得分:2)

似乎你的大多数问题都得到了回答,但为了完整起见,我们来回顾一下。

  1. 没有任何内容打印的原因是因为您已初始化数组以包​​含所有0值。 0是c字符串的空终止符,表示它标记字符串的结尾。它也是一个非打印字符,我们不希望用打印字符结束每个c字符串,这是没有意义的。如果您想要ASCII字符0,则需要'0',即十进制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'!
    
  4. 希望这有帮助!练习和使用c-strings来更好地理解它们可能是有用的。请注意,'0'0之间存在差异,0只是零值,而'0'是零字符的字符值。 (阅读:48)。因此,如果要将memset设置为打印0,则必须memset(myArray, '0', 100);

答案 2 :(得分:0)

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