不知何故,当我运行此代码并且输入字符串时,跳过第一个字符串,其中i = 0,它开始从A [1]输入字符串。所以我最终得到的A [0]充满了内存中的随机内容。有人可以指出这个问题吗?
cin>>s;
char** A;
A = new char *[s];
cout<<"now please fill the strings"<<endl;
for (int i=0;i<s;i++)
{
A[i] = new char[100];
cout<<"string "<<i<<": ";
gets(A[i]);
}
答案 0 :(得分:5)
那段代码太可怕了。以下是它在真正的C ++中应该是什么样子:
#include <string>
#include <iostream>
#include <vector>
int main()
{
std::cout << "Please start entering lines. A blank line or "
<< "EOF (Ctrl-D) will terminate the input.\n";
std::vector<std::string> lines;
for (std::string line; std::getline(std::cin, line) && !line.empty(); )
{
lines.push_back(line);
}
std::cout << "Thank you, goodbye.\n";
}
请注意,没有任何指针或new
表达式。
如果您愿意,可以在std::cout << "> " &&
循环的条件检查开始时添加for
来添加一些提示打印。
答案 1 :(得分:2)
可能是因为你正在使用gets()...从不使用gets() 改为使用fgets()。
答案 2 :(得分:1)
问题在于,cin>>s;
只会选择您想要的号码,并在\n
enter
stdin
上留下gets()
(来自int a = fgetc(stdin);
媒体的换行符)在第一次迭代中获得。这不是修复它的最好方法,但要证明它在该行之后写下这一行:
a
之后查看{{1}}以确认其换行符。