gpt4 book ai didi

c++ - 如何使用cin读取字符数据存入数组并显示?

转载 作者:太空宇宙 更新时间:2023-11-04 15:50:52 25 4
gpt4 key购买 nike

我正在编写一个简单的控制台应用程序来读取 3 个单词并将它们保存在一个数组中。但是从控制台获取三个输入后,它只在控制台中显示第三个单词三次。例如,如果我输入:“一”、“二”、“三”,则输出仅显示“三”3 次)。

这是我的代码:

int main(int argc, char *argv[])
{
char* input[30];
char word[30];

int i=0;

for(i=0; i<3 ;++i)
{
cin >> word;
input[i] = word;
}

input[i] = 0;
i=0;

while(input[i])
{
cout << input[i] << endl;
i++;
}

return 0;
}

我在这里做错了什么?感谢您的帮助。

最佳答案

您只有一个缓冲区 ( char word[30] ),每次都会覆盖它。

当你这样做时:

input[i] = word;

您正在将第一个元素的地址分配给 input 中的每个元素,并且只为缓冲区分配地址(当您使用裸名时,数组会降级为指针)。您最终在 input[] 中得到相同地址的三个拷贝(这是 word 的地址,其中包含您从 cin)

解决此问题的一种方法是使用 strdup() 并将新分配的字符串分配给您的 input[i]

for(i=0; i<3 ;++i)
{
cin >> word;
input[i] = strdup(word);
}

此外...如果您只需要三个输入“单词”,您只需要一个包含 3 个 char 指针的数组:

char *input[3];

你的输出循环看起来很像你的输入循环:

for(i=0; i<3 ;++i)
{
cout << input[i] << endl;
}

编辑:请注意,此答案是基于您想要使用数组。如果这不是要求的家庭作业,请参阅 bobbymcr 的回答 - 在 C++ 中,使用 C++。

关于c++ - 如何使用cin读取字符数据存入数组并显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8642174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com