C++ C++;即使不满足条件,循环也会终止

C++ C++;即使不满足条件,循环也会终止,c++,while-loop,C++,While Loop,我希望程序不断请求值进行计算,直到标志为true,然后程序必须停止,但它只执行一次。我不知道我是否正确地使用了char,或者是否有更好的方法使用标志来执行这些类型的while循环。任何帮助都很好。[在此处输入图像描述][1] int main() { displayMenu(); bool flag = false; while(!flag) { int choice = 0; int val1 = 0; int val2 = 0; int ans

我希望程序不断请求值进行计算,直到标志为true,然后程序必须停止,但它只执行一次。我不知道我是否正确地使用了char,或者是否有更好的方法使用标志来执行这些类型的while循环。任何帮助都很好。[在此处输入图像描述][1]

int main()
{
    displayMenu();
    bool flag = false;
    while(!flag)
    {
        int choice = 0; int val1 = 0; int val2 = 0; int ans = 0;
        cout << "Enter your choice (1-5): ";
        cin >> choice;
        cout << "\nEnter integer 1: ";
        cin >> val1;
        cout << "\nEnter integer 2: ";
        cin >> val2;
        if(choice < 0 || choice > 5)
        {
            cout << "\nEnter a choice between 1-5: ";
            cin >> choice;
        }
        if (choice == 1)
        {
          ans = Add(val1,val2);
          cout << "\nResult: " << ans << endl;
        }
        if (choice == 2)
        {
          ans = Subtract(val1,val2);
          cout << "\nResult: " << ans << endl;
        }
        if (choice == 3)
        {
          ans = Multiply(val1,val2);
          cout << "\nResult: " << ans << endl;
        }
        if (choice == 4)
        {
          ans = Divide(val1,val2);
          cout << "\nResult: " << ans << endl;
        }
        if (choice == 5)
        {
          ans = Modulus(val1,val2);
          cout << "\nResult: " << ans << endl;
        }
        char c_flag[] = "n";
        cout << "Press Y or y to continue: ";
        cin >> c_flag;
        if(c_flag == "y" || c_flag == "Y")
        {
            flag = false;
        }
        else
        {
            flag = true;
        }
    }
    return 0;
}
intmain()
{
显示菜单();
布尔标志=假;
while(!flag)
{
int-choice=0;int-val1=0;int-val2=0;int-ans=0;
选择;
cout>val1;
cout>val2;
如果(选项<0 | |选项>5)
{
选择;
}
如果(选项==1)
{
ans=添加(val1,val2);

cout对于数据类型
char c_flag[]
,条件
c_flag==“y”
很可能永远不会满足,因为您正在比较两个(不同)指针值,而不是它们的内容

改用
std::string c_flag
,至少您的条件应该按预期工作

你也可以写

char c_flag[] = "y";
...
if (strcmp(c_flag,"y")==0) ...

但是我更喜欢
std::string
-变量,原因如下:使用
char c_flag[]=“y”
,您可以分配一个大小为2的数组(包括字符串终止字符);使用
cin>>c_标志
,如果输入多个字符,将超过数组长度并产生未定义的行为。相反,使用
std::string
,变量将在必要时“增长”。

c_标志==“y”
--C风格的字符串比较不是这样工作的。请改用
std::string
strncmp
来代替。使用
-Wall
和可能的
-Wextra
进行编译。我相信GCC应该警告您正在做的事情。@jww无论编译器是否特别警告,启用更多警告始终是一个问题好主意。