下面有我为大学课程编写的简单程序。 我知道它实际上并没有做任何事情,但这只是一门课程的作业。

我不知道的部分是为什么外循环不起作用?

用户需要按“ 1”继续,程序退出任何其他键。

但是,如果用户按下“ 1”而仍然退出,它仍然不会继续。

我尝试在cin >>重复之前添加cin.clear(),但这不起作用。

我也尝试过使用cin.ignore(),但这似乎也无济于事。

有任何想法吗?

谢谢

int main()
{
    int repeat = '1';
    stack<char> cstr;
    char c;

    while (repeat == '1')
    {
        cout << "Enter in a name: ";

        while (cin.get(c) && c != '\n')
        {
            cstr.push(c);
        }

        cout << "\n Enter another name? 1 = Continue, any other key to exit the program";
        cin >> repeat;
        repeat = getchar();
   }
}

#1楼 票数:2 已采纳

您的代码完全没有错。 对我来说似乎很好。

编辑:对不起,直到您删除getchar,它才起作用。 忘了提那。 找出错误的简单方法是仅显示重复变量的值,以查看该值是什么以及错误出在哪里。

屏幕截图显示代码有效

工作代码的屏幕截图

一切似乎都正常。 我想评论一下您的程序结构。 对于像这样的小型程序,没关系,但始终最好采用逻辑方式。 对于类似这样的问题,您应该实现do while循环而不是while循环,这样它可以不检查而进入,然后接受用户输入并检查后置条件。 下面的例子。

    char  repeat;

    do
    {
        //Your codes in here
    }while (repeat == '1');

除非您的问题指定您使用while循环,否则使用此方法更合乎逻辑。 无论如何希望这会有所帮助。

#2楼 票数:1

   cin >> repeat; 

它读取重复为int。 (1不等于'1')

repeat = getchar();

它读取特殊字符'\\ n'的int代码-行尾的符号。

您必须使用

char repeat = '1';

或写

int repeat = 1;

而不使用getchar()

#3楼 票数:1

运行这个。 它将以某种方式解决您的问题,repeat = getchar使repeat = 10。

 int main()
    {
    char  repeat = '1';
    stack<char> cstr;
    char c;

    while (repeat == '1')
    {
        cout << "Enter in a name: ";
        cin.ignore();
        while (cin.get(c) && c != '\n')
        {
            cstr.push(c);
        }

        cout << "\nEnter another name ? \nPress 1 to Continue : ";
        cin >> repeat;
        cout << endl;
    }
    system("pause");
    }

#4楼 票数:1

cin >> repeat正在尝试从键盘读取整数,因为repeatint类型的变量。 但是,您正在验证从键盘读取的整数是否等于49(不是所需的字符“ 1”的ASCII码)。 一个解决方案是更换生产线

int repeat = '1';

int repeat = 1;

并替换

while (repeat == '1')

while (repeat == 1)

因为这样您将比较从键盘读取的整数与整数1(而不是字符 “ 1”)。 同样,在循环结束时,您从键盘读取输入并将其repeat存储,但是随后您立即再次读取输入并将该值存储repeat ,替换了先前的值。 为了解决这个问题,更换线

repeat = getchar();

getchar();

那应该做到的。

  ask by SkyeBoniwell translate from so

未解决问题?本站智能推荐:

1回复

在一个函数中以两个不同的while循环获取输入不起作用

只要用户在while循环中输入“#”,我就希望接受输入。 我实现了如下所示的while算法,而第一个算法确实有效。 但是程序不会进入第二个while循环。 我在调试时看到的是,在一个函数中,只有一个while(cin>> ....)算法有效,它会自动忽略第二个算法。
1回复

在while循环中使用C ++ cin,但不保留控制台屏幕

我使用cin作为while循环的条件,在该条件下,除非输入文件末尾或字符,否则它接受整数。 但是控制台窗口在结果之后消失。 如何握住屏幕
3回复

使用Array [10]并使用While循环(使用模10将用户输入配对)将其递增

我的代码有问题,当我运行它并输入数字时,什么都没有发生。 应该运行类似1234556789的输出,输出应类似于1:9 2:8 3:7 4:6 5:5 我知道有时如果没有系统暂停,则会在运行部分代码并刚刚结束的地方发生这种情况,但是我不确定这是怎么回事。
4回复

C++ 程序,其中,从用户读取一个六位整数作为输入,并通过 for/While 循环以字的形式输出其每个数字

/ 编写一个 C++ 程序,从用户那里读取一个六位整数作为输入,并使用循环以字的形式输出它的每个数字。/ 当我运行程序时,它输出相反的值,例如我想打印 123456 而不是输出一二三四五六它输出六五四三二一。 我该如何解决?
1回复

基于数量的QMenu的基于循环

作为Qt的新手,我不知道如何创建QMenu的向量。 使用C++我得到以下(简单)想法: std::vector<QMenu> *subMenus; 然后使用for-loop创建一定数量的菜单。 List的大小较大(〜40)。 问题是在执行此操作时,我遇到以
4回复

基于现有变量循环的范围

在C ++ 11中使用基于for循环的范围和现有变量,我希望该变量用循环后的最后一次迭代的值填充。 但是,当我测试它时,我得到了不同的结果。 例: MSVC 2013似乎不支持基于范围的循环而没有类型声明 GCC-5.1自动引入一个新变量或将其设置回初始值,给出
2回复

支持类中的每个循环

如何在c ++ 0x和Visual Studio 2010中为我的课程添加“针对每个”的支持?
2回复

如何运行给出正确结果的无限循环? C++

我想运行一个无限循环,打印整数 2 的幂,即 2,4,8,16。 我已经编写了这段代码,但它在循环中无法正常工作,它给出了0作为答案。 但是,它在没有循环的情况下工作正常意味着它给出了唯一的答案。