В начале я могу использовать cin.getline (input2, 40), чтобы назначить строку для ввода2. Я делаю это так, чтобы у меня было две строки c с информацией в них.C++ В то время как в операторе switch cin.getline не присваивает переменной c string
Позже я вхожу в переключатель, где люди могут писать одну из строк строки c. Когда он выполняет cin.getline (input2, 40); как опция, все, что он делает, это удалить информацию в этой строке.
Я попытался удалить назначение cstring в начале, позволяя его изменять в коммутаторе, но он не назначен, а просто возвращается к оператору switch.
Я пробовал использовать cin.getline (input2, 40, '\ n'), чтобы cin ждал новой строки, прежде чем продолжить, но, похоже, она автоматически получает ее.
Опция переключателя для ввода - «i».
Я боролся с ним в течение последнего часа или около того, поэтому теперь я смиренно прошу вас о помощи.
Бонус указывает на то, что выясняется, почему, когда я помещаю x, инструкция switch не заканчивается.
#include<iostream>
#include<conio.h>
#include<string>
#include<algorithm>
using namespace std;
char rev (char *);
bool compareChar (char *, char *);
int getLength(char *);
string concat1 (char *, char *);
int main()
{
char input1[80];
char input2[80];
char *input1Ptr = input1;
char *input2Ptr = input2;
int length = 0;
string concat = "None";
cout << "Input a line of text for line 1: ";
cin.getline(input1, 40);
cout << "Input a line of text for line 2: ";
cin.getline(input2, 40);
char in;
while (in != 'x' || in != 'X'){
cout << endl;
cout << endl;
cout << "Enter i for Input" << endl;
cout << "Enter r for Reverse" << endl;
cout << "Enter c for compare" << endl;
cout << "Enter o for concatenate" << endl;
cout << "Current concatenate is " << concat << endl;
cout << "String a" << endl;
cout << "String b" << endl;
cout << "Enter x to exit" << endl;
cin >> in;
switch (in) {
case 'i':
case 'I':
cout << endl;
cout << "Rewrite Line 2: " << endl;
cin.getline(input2, 40, '\n');
cout << input2;
break;
case 'r':
case 'R':
length = getLength(input1);
reverse(input1, input1 + length);
cout << input1;
break;
case 'c':
case 'C':
if (compareChar(input1Ptr, input2Ptr) == 1){
cout << "True" << endl;
}
else {
cout << "False" << endl;
}
break;
case 'o':
case 'O':
concat = concat1(input1, input2);
cout << concat;
break;
case 'a':
case 'A':
cout << input1;
break;
case 'b':
case 'B':
cout << input2;
break;
default:
cout << "Syntax Error";
in = 'x';
break;
}
}
}
string concat1 (char *a, char *b){
string con;
con += a;
con += b;
return con;
}
char rev (char *a){
int length1 = 0;
int counter = 0;
int incr = 0;
char backward[40];
while (*a) {
cout << *a << " " ;
length1++;
a++;
}
counter = length1;
while (counter > 0){
backward[incr] = a[counter];
counter--;
incr++;
}
return backward[40];
}
bool compareChar (char *a, char *b){
int counter = 0;
bool comparing = false;
while (counter < 40){
if (a[counter] == b[counter]){
counter++;
comparing = true;
}
else {
counter = 40;
}
}
return comparing;
}
int getLength(char *input1)
{
int length = 0;
while (*input1){
input1++;
length++;
}
return length;
}
'назад [40]' находится за пределами для 'char назад [40]'. – crashmstr
[Старичка, но лакомство] (http://stackoverflow.com/q/5739937/1460794). – wally
Хех, да, я прекратил использовать эту функцию и вместо этого использовал функцию сортировки, я думаю. Эта функция есть наследие, и я не мог понять, как это работает, и именно поэтому я переключился с этого. Хороший улов, хотя я не мог понять это. – Greg