(C ++)打印char数组字符串的单词时出现问题

时间:2019-03-02 07:00:48

标签: c++ arrays string

我正在使用字符串(数据类型)和char数组制作一个c ++程序。现在,数据类型正在打印单词。但是,我在使用char数组时遇到了一些麻烦。这是代码:

#include<iostream>
#include<string.h>
using namespace std;
int main(){
    char str[200]; 
    string str1;
    cout<<"Enter a string:\t";
    getline(cin,str1);
    cout<<str1 <<endl;
    cout<<"enter second string:\t";
    cin>>str;
    cin.get(str,200);
    cout<<str;

}

code output

因此,您可以在输出中看到,数据类型字符串将单词打印得很好。但是,char数组缺少第一个单词。难道我做错了什么?还是char数组以不同的方式工作?请解释。谢谢。

2 个答案:

答案 0 :(得分:0)

cout<<"enter second string:\t";
cin>>str;
cin.get(str,200);

在这里,您首先尝试将第二个单词读入同一变量两次。注释其中之一,并尝试打印str的内容。

#include<iostream>
#include<string.h>
using namespace std;
int main(){
    char str[200]; 
    string str1;
    cout<<"Enter a string:\t";
    getline(cin,str1);
    cout<<str1 <<endl;
    cout<<"enter second string:\t";
    // cin>>str;
    cin.get(str,200);
    cout<<str<<endl;

}

答案 1 :(得分:0)

虽然您已经发现并不需要cin >> str;,因为您只是用str再写一次到cin.getline (str, sizeof str),但是还有许多其他问题需要解决:

1。。除非您的编译器是古老的,否则您应该#include <string>,而不是C头文件string.h

2。。请勿在代码中使用魔术数字。如果您需要一个常数,例如str中的最大字符数,#define为常数,或使用全局enum进行相同操作,例如

#define MAXC 200    /* if you need a constant, #define one (or more) */
...
    char str[MAXC]; /* don't use 'magic-number', use a constant */

这样,将来以及以后更改str中的字符数时,您不必遍历整个代码并更改每次出现的幻数,例如cin.get(str,200);

3。。验证每个用户输入。否则,失败的输入可能会在您的输入流上设置一个错误位,并且尝试从设置了错误位的流中读取数据会导致未定义的行为。您可以这样做:

    if (!getline(cin,str1)) {   /* VALIDATE every input */
        cerr << "error: input failure - str1.\n";
        return 1;
    }

    if (cin.get (str, sizeof str))
        cout << str << endl;

注意:在cin.get (str, sizeof str)之后不再进行任何尝试读取,因此只需使用str就足够了)

4。。始终在最后一行输出之后输出换行符,以确保您的程序符合POSIX。否则,在许多操作系统上,如果写入stdout,则会使用户提示混乱,如果将输出重定向到文件,例如

,则会创建不符合POSIX的输出文件。
my cat has none01:22 wizard:~/dev/src-cpp/tmp/debug>

完全将其放入,您可以执行以下操作:

#include <iostream>
#include <string>   /* depending on your compiler */

#define MAXC 200    /* if you need a constant, #define one (or more) */

using namespace std;

int main (void) {

    char str[MAXC]; /* don't use 'magic-number', use a constant */
    string str1;

    cout << "enter a string: ";
    if (!getline(cin,str1)) {   /* VALIDATE every input */
        cerr << "error: input failure - str1.\n";
        return 1;
    }
    cout << str1 << endl;

    cout << "enter second string: ";
    // cin >> str;  /* not needed */
    if (cin.get (str, sizeof str))
        cout << str << endl;

}

使用/输出示例

$ ./bin/cin.get_getline
enter a string: my dog has fleas
my dog has fleas
enter second string: my cat has none
my cat has none