0
#include<iostream.h>
#include<conio.h>

void main()
{
    clrscr();
    char c[50];

    //cin>>c;
    cin.getline(c,50);

    //cout.write(c,50);
    cout<<c;
    getch();
}

如果我输入的内容少于 50 个字符,我会得到垃圾值。为什么会这样?

4

3 回答 3

1

你没有初始化你的数组:

#include<iostream>
#include<conio.h>
using std::cout;
using std::cin;

int main()
{
    clrscr();

    char c[50] = {};//initialize your array here!

    cin.getline(c,50);
    cout<<c;

    getch();

    return 0;
}

还:

  • iostream.h已过时。
  • 如果您的目标是跨平台开发,请避免:<conio.h>因此,它定义的函数在您的代码中使用:clscr()getch().
  • 如果可以的话,尽可能避免使用 C 字符串。您正在使用 C++,请使用:<string>库和std::string. 在此处阅读有关此内容的更多信息:C-String 与 C++Strings 的效率
  • 可以对缓冲输入进行类似的论证,使用cin.getline(),但我不知道你的最终目标,所以我不能对此发表充分评论。但是,您似乎正在尝试进行缓冲输入。
于 2013-08-11T11:21:24.293 回答
0

一种简单而干净的方法

#include<iostream>
#include<string>
int main()
{
    std::string str;
    getline(std::cin, str);
    cout<<str;
    std::cin.get();    //or std::cin.ignore();
}

需要注意的几点:

  1. 新标准规定 main() 的返回类型应该是int而不是void。(不返回任何东西默认int返回)

  2. 甚至getchar()已经过时了。

  3. 使用std::stringinsteeadchar数组,因为它易于实现且安全

于 2013-08-11T11:39:52.757 回答
0

使用指定的答案我也遇到了同样的问题,因为我没有意识到我的文件是用 16 位编码的。所以我不得不使用std::wstring(和std::wifstream)。

于 2016-05-04T17:50:06.367 回答