Значение мусора с getline

#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 символов. Почему это так ?

0

Решение

Вы не инициализировали свой массив:

#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(), но я не знаю вашей конечной цели, поэтому я не могу адекватно это прокомментировать. Но, похоже, вы пытаетесь сделать буферизованный ввод.
1

Другие решения

Простой и чистый подход

#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 массивы как легко и безопасно реализовать

0

У меня также была та же проблема с использованием указанных ответов, потому что я не знал, что мой файл был закодирован в 16 битах. Поэтому мне пришлось использовать std :: wstring (и std :: wifstream).

0