c++ - 为什么输入会导致我的 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
)。
解决方案
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;
}
}
推荐阅读
- c - OpenSSL C API:使用 CRL 进行证书链验证
- php - 将 api 路由到 Laravel 中的控制器
- excel - VBA:在 For 循环中的 IF/Then 语句中插入行
- visual-studio-2017 - 图片幻灯片显示在我的 vs 工作室的背景中
- c++ - 我的程序造反了?未进行更改
- javascript - 使用本地计算机上的 Jquery 重新加载或刷新页面
- javascript - 导入 React:意外的标识符“React”。import call 只需要一个参数。”
- opencl - 如何编译包含 GCN 卡内联汇编的 .cl 文件?
- jquery - jQuery UI 的可拖动文本框
- c++ - QPixmap() 的 std::bad_alloc 问题