gpt4 book ai didi

C++ 在 switch 语句中,cin.getline 不分配给 c 字符串变量

转载 作者:行者123 更新时间:2023-11-30 02:27:29 28 4
gpt4 key购买 nike

早些时候,我能够使用 cin.getline(input2, 40) 为 input2 分配一条线。我也这样做,这样我就有了两个包含信息的 C 字符串。

稍后我输入一个开关,人们可以在其中改写其中一个 c 字符串行。当它执行 cin.getline(input2, 40);作为选项,它所做的只是删除该字符串中的信息。

我试过在开始时删除分配 cstring,允许它在 switch 中更改,但它没有分配,而只是返回到 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;
}

最佳答案

对于您的退出条件,我们只显示真值表的一部分:

in     |   in != 'x'     |  in != 'X'     |  (in != x || in != 'X')
--------------------------------------------------------------------
'a' T T T
'A' T T T
'b' T T T
'x' false T T
'X' T false T
'7' T T T

这就是循环针对所有可能的输入继续运行的原因。您可能应该阅读有关 DeMorgan 定理的内容,并思考它在此处的应用方式。

关于C++ 在 switch 语句中,cin.getline 不分配给 c 字符串变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41686204/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com