首页 > 解决方案 > 为什么输入会导致我的 do/while 菜单出现问题

问题描述

我正在尝试使用 do/while 编写带有菜单的程序。作为第一步,我在括号中输入命令行参数,例如“这里的一些文本”,并获得一个 C 风格的字符串。在每种情况下,我的程序都应该调用该字符串上的特定函数。

问题是,我的功能之一是使用用户输入cin.getline()。当我调用它并尝试输入一个新字符串来替换前一个字符串时,我的程序将此字符串作为菜单中的一个选项。

主要功能:

char newArray[100]{};
int choice{0};
do {
    cin >> choice;
    switch (choice) {
        case 1:
            functionF(argv[1], newArray);
            break;
        case 2:
            cout << argv[1] << endl;
            break;
        default:
            cout << "wtf";
    }
} while (choice != 3);

还有一个功能:

void functionF(char *ptr, char newArray[]) {
    cin.getline(newArray, 100);
    for (int i = 0; i < 100; ++i) {
        ptr[i] = newArray[i];
        if (newArray[i] == '\0')
            break;
    }
}

没有 do/while 菜单功能可以正常工作。

输入示例:命令行输入“文本示例”,现在argv[1]是这个 C 风格的字符串。如果我输入 2,程序输出argv[1],当我按 1 时,我希望程序将另一个 C 风格的字符串作为用户输入。但是当我尝试输入新字符串时,我的程序接受我的输入,例如(cin >> choice),例如我试图输入“新文本在这里”,我的程序必须更改argv[1]这一行,但它将这个输入作为(cin >> choice)。

标签: c++command-linedo-whilecin

解决方案


void functionF(char *ptr, char newArray[]) {
    cin.ignore();                  //add this line to fix an error
    cin.getline(newArray, 100);
    for (int i = 0; i < 100; ++i) {
        ptr[i] = newArray[i];
        if (newArray[i] == '\0')
            break;
    }
}

推荐阅读