纣王家子迎新 2023-10-26 17:43 采纳率: 0%
浏览 16

C++cin函数在while多重循环中无法输入问题


#include<iostream>
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/003809213896115.png "#left")

using namespace std;

#define maxsize 100
typedef int elemtype;
typedef struct node {
    elemtype elem[maxsize];
    int top;
}sestack;
bool create(node& S) {
    S.top = -1;
    return 1;
}
bool isempty(node& S) {
    if (S.top = -1) {
        cout << "栈为空" << endl;
        return 1;
    }
    return 0;
}
bool isfull(node& S) {
    if (S.top + 1 == maxsize) {
        cout << "栈满" << endl;
        return 1;
    }
    return 0;
}
int enstack(node& S,int e) {
    if (isfull(S) == 1)return 0;
    S.elem[S.top+1] = e;
    S.top++;
    return 1;
}
int destack(node& S,int e) {
    if (isempty(S)==1)return 0;
    e=S.elem[S.top+1];
    S.top--;
    return e;
}
bool huiwen(node& S) {
    node P;
    create(P);
    elemtype e=0;
    int i = S.top + 1, n = 0, m = 0;
    while (i != 0) {
        e=destack(S, e);
        if (e != '#') {
            P.elem[P.top + 1] = S.elem[i];
            P.top++;
        }
        else
            n++;
        if (n != 1) {
            for (int i = 0; i < P.top + 1; i++) {
                cout << P.elem[i];
            }
            m = (P.top + 1) / 2;
            for (int i = 0; i < (P.top + 1) / 2; i++) {
                if (P.elem[i] == P.elem[P.top])m--;
            }
            if (m == 0)cout << "是回文" << endl;
            else cout << "不是回文" << endl;
            n--;
        }
        i--;
    }
    return 1;
}
int main() {
    node S;
    create(S);        //    S.top = -1;
    int num = 0;
    elemtype e;
    cout << "输入需要判断回文的字符串的个数:" << endl;
    cin >> num;
    num += 1;        //
    cout << "输入的每个字符串以#相隔,格式如下:" << endl;
    cout << "#asffs#ffsff#dhuse#" << endl;
    cout << "请输入字符串:" << endl;
    while (num!=0) {
        cin >> e;
        if (e == '#') {
            num--;
        }
        enstack(S, e);
    }
    huiwen(S);
    return 0;
}

img

img


为什么输入的值没有缓存到e中,导致无法触发n--从而跳出while循环

  • 写回答

2条回答 默认 最新

  • CodeXTreme工作室 2023-10-26 18:02
    关注

    下面的回答由我制作的智能DEBUG程序完成。

    1.输入的字符应该是被缓存的,并在while循环中,每次输入一个字符后都会触发循环。然而,如果你指的是在huiwen函数中的某个while循环没有按预期触发n--,那可能是由于输入的字符没有被正确地从栈中弹出,或者在判断回文的过程中出现了问题。

    2.isempty函数应该是用来判断栈是否为空的,但你的代码中S.top = -1应该是一个赋值操作,而不是一个判断操作。应该将代码改为:

    bool isempty(node& S) {
        if (S.top == -1) {
            cout << "栈为空" << endl;
            return 1;
        }
        return 0;
    }
    

    3.(与2.同类错误)isfull函数应该是用来判断栈是否已满的,但你的代码中S.top + 1 == maxsize也应该是一个判断操作,而不是一个赋值操作。应该将代码改为:

    bool isfull(node& S) {
        if (S.top + 1 == maxsize) {
            cout << "栈满" << endl;
            return 1;
        }
        return 0;
    }
    

    综上所述,我给你提供了一些建议。
    巩固赋值=和判断==的区别。赋值的格式为:

    赋值到的地方 = 赋值的内容;
    

    判断是否相等的格式为:

    判断内容1 == 判断内容2
    
    评论

报告相同问题?

问题事件

  • 创建了问题 10月26日