Как не получить символ конца строки с помощью cin.get () в переполнении стека

так что я знаю, как использовать cin.get() а как использовать буферы или так я думал. Вот пример программы, которая получает n (число или количество строк) и m (количество столбцов) для таблицы. Затем он получает n * m символов, сохраняет их в массив и выводит их:

#include <bits/stdc++.h>
using namespace std;
int n, m;
char in;
char a[100][100];
int main()
{
cin >> n >> m;
for(int i = 0;i < n; ++i)
{
for(int j = 0;j < m; ++j)
{
cin.get(in);
a[i][j] = in;
if(j == m - 1)
cin.get();
}
}
for(int i = 0;i < n; ++i)
{
for(int j = 0;j < m; ++j)
cout <<a[i][j];
cout << endl;
}
return 0;
}

Эта программа, кажется, считает некоторые символы в конце строки. Может кто-то исправить это и объяснить мне. Заранее спасибо!

0

Решение

Когда вы введете n и m, cin.get () начнется сразу с символа, следующего за номером, который может быть пробелом или новой строкой. Поэтому может произойти сдвиг между ожидаемым вводом и полученным вводом. Это приводит к тому, что каждые m символов игнорируются, т. Е. Даже если не новая строка, и наоборот, некоторые новые строки читаются вместо другого символа.

После извлечения вашего числа было бы безопаснее использовать символы cin.ignore () до первой новой строки.

Точно так же, проверьте для каждого n-го символа, который вы пропускаете, если вы ожидаете новую строку.

0

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

Вы должны использовать cin, если вы не хотите использовать символы конца и пробела;

Просто замените cin.get () на cin >>

#include <bits/stdc++.h>
using namespace std;
int n, m;
char in;
char a[100][100];
int main()
{
cin >> n >> m;
for(int i = 0;i < n; ++i)
{
for(int j = 0;j < m; ++j)
{
cin>>in;
a[i][j] = in;
}
}
for(int i = 0;i < n; ++i)
{
for(int j = 0;j < m; ++j)
cout <<a[i][j];
cout << endl;
}
return 0;
}
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector