跳过字符串数组中的第一个字符串

时间:2012-12-18 21:26:44

标签: c++

不知何故,当我运行此代码并且输入字符串时,跳过第一个字符串,其中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]);
}

3 个答案:

答案 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()。

gets vs fgets

答案 2 :(得分:1)

问题在于,cin>>s;只会选择您想要的号码,并在\n enter stdin上留下gets()(来自int a = fgetc(stdin); 媒体的换行符)在第一次迭代中获得。这不是修复它的最好方法,但要证明它在该行之后写下这一行:

a

之后查看{{1}}以确认其换行符。