垃圾值与获取线

Garbage value with getline

本文关键字:获取      更新时间:2023-10-16
#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 个字符的任何内容,我会得到垃圾值。为什么会这样?

您没有初始化数组:

#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 型字符串与 C++ 字符串的效率
  • 可以使用cin.getline()对缓冲输入进行类似的论证,但我不知道您的最终目标,所以我无法对此进行充分评论。但是,看起来您确实在尝试进行缓冲输入。

一种简单而干净的方法

#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::string Insteead char阵列,因为它易于实施且安全

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