如何使用cin读取字符数据以存储在数组中并显示
how to read character data using cin to store in an array and display?
我正在编写一个简单的控制台应用程序来读取3个单词并将它们保存在一个数组中。但是,在从控制台中输入三个单词之后,它只在控制台中显示第三个单词三次。例如,如果我输入:"one","two","three",输出只显示"three"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;
}
Edit:请注意,这个答案是基于您想要使用数组。如果这不是需要这样做的作业,请参阅bobbymcr的答案-当使用c++时,请使用c++。
您的问题标记为" c++ "(而不是"C"),因此我建议您实际使用c++习惯用法来完成此操作。现代程序不应该使用原始的char
数组和指针,除非用于低级编程和与遗留或基本C api的互操作性。
考虑使用string
和vector
,因为它们将使您的生活更轻松。下面是使用这些类型的程序的重新实现。除了迭代器的东西(我承认在你习惯它之前有点奇怪),它应该比使用char *
等的等效代码清晰得多。
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main(int argc, char ** argv)
{
vector<string> input;
for (int i = 0; i < 3; ++i)
{
string word;
cin >> word;
input.push_back(word);
}
for (vector<string>::const_iterator it = input.cbegin(); it != input.cend(); ++it)
{
cout << *it << endl;
}
return 0;
}
问题就在这里:
char* input[30];
你可能会认为这是字符数组的数组,但本质上不是。
你要么需要动态地为数组分配空间,要么简单地使用二维字符数组(固定你可以拥有的最大单词数)。
char input[30][30]; // maximum 30 words having at most 29 characters each
相关文章:
- 显示错误输出的简单数组排序程序
- 显示数组中的学生 ID 和最高分
- 代码使用向量成功运行,但使用数组显示错误
- 对象初始化后在C++中显示 char 数组时的异常行为
- 为什么静态数组成员变量在调用对象的实例后不显示任何内容?
- 在命令行上将输入显示到数组中时如何删除 ./a.out?
- 为什么将指针重新分配给 1D 数组的 char 时显示错误,但 2D 数组工作正常?
- 如何在函数中显示结构数组
- 显示结构数组
- 在数组中显示第一个元素用户输入
- 在大小为 10 的 char 数组中输入超过 10 个字符的字符串并输出时,它会显示整个数组而不是前 10 个数组.为什
- 我编写了一个程序来显示数组的内容,但它显示的是它的地址
- 为什么断点显示数组的第二个值是一个大数字?额外学分工作
- 将 5 个 for 循环压缩为,将数组显示为 1
- 为什么析构函数和复制构造函数使用对象数组显示此行为
- 在VC2010中使用Char数组显示字符串时发生运行时错误
- 将数组显示为表格
- 从boost::p roperty_tree读取数组显示为空白
- c++错误数组显示
- 二维动态数组c++显示问题