Как получить посимвольный ввод в C ++?

Сначала мне нужно прочитать два целых числа N & Q разделены пробелом. Я делаю это с помощью CIN. Затем в следующих двух строках следуют два двоичных числа, каждое из N цифр. Я пытаюсь читать эти числа по крупицам, используя getchar () и помещая их в вектор типа int, но он печатает значения мусора. Есть ли проблема с символом новой строки? Я знаю, что мог сначала прочитать их в строку, а затем поместить их в вектор, но я хотел сделать это так. Вот мой код:

#include <iostream>
#include <algorithm>
#include <vector>
#include <stdio.h>
using namespace std;
int main(){
int N;
int Q;
cin >>N>>Q;
string A, B;
//cin >> A>>B;
vector <int> Abit;
vector <int> Bbit;

for (int i=0;i<N;i++){
char c= (int) getchar();
Abit.push_back(c);
}
for (int i=0;i<N;i++){
//  cout << Abit.at(i);
char c= (int) getchar();
Bbit.push_back(c);
}
for (int i=0;i<N;i++){
cout << Abit.at(i);
//  char c= (int) getchar();
//  Bbit.push_back(c);
}
}

1

Решение

Вы можете просто сделать это, читая символ.

char c;
for ( int i = 0; i < N; ++i ){
cin >> c;
Abit.push_back(c);
}
for ( int i = 0; i < N; ++i ){
cin >> c;
Bbit.push_back(c);
}

оператор >> позволит избежать любой формы разделения, пробела, новой строки и т. д.

3

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

Каждый раз, когда вы вводите символ и нажимаете клавишу возврата, getchar будет вызываться дважды — в первый раз для введенного вами символа и во второй раз для символа \ n. Итак, если вы введете 1 2 3 4 5, вы вернете в свой вектор следующее: 10, 49, 10, 50, 10,

Первый 10 если для оставшихся \n персонаж из cin << N << Q; вызов.

Другой 49 обозначает ASCII 1и 50 для ASCII 2,

Вы можете прочитать всю строку в строку, а затем извлечь символы из строки. Конечно, вам все еще нужно преобразовать символы ASCII в целые числа, но вы можете сделать это, вычтя значение символа из значения ASCII 0: c - '0',

Кроме того, вы можете удалить игнорировать все до и включая новую строку, читая их перед фактической цифрой:

 while(getchar() != '\n');
char c= (int) getchar() - '0';

Лучший способ, который пропустил бы все новые строки, прежде чем цифра предложена Чарли Бернс. Вам просто нужно прочитать все символы новой строки перед фактической цифрой:

    char c;
while((c = getchar()) == '\n');
Abit.push_back(c - '0');
2

По вопросам рекламы [email protected]