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