当前位置: 首页 > 知识库问答 >
问题:

在C #中跳过用户输入

堵琨
2023-03-14

在试图使Do/While循环工作时,我很难找到正确的语法。我想用C语言编写一个计算器,让用户输入一个字符串,然后它做它的事情并打印结果,询问用户是否想再去一次。

到目前为止,我有一个简单的main函数,只是为了让Do/While循环正确,但是当我输入Y或Y时,程序只是问我是否想再次继续,它没有给我再次运行“计算器”部分的机会。我做错了什么?

#include "stdafx.h"
#include <iostream> //cout, cin
#include <string> //string
#include <algorithm> //remove_if(), end(), begin(), erase()
#include <stack> //stack<type>
#include <ctype.h> //isdigit()
#include <vector> //vectors
#include <stdlib.h>

using namespace std;

int main()
{
    string userInput = ""; //declaring and initialising a string called user input
    char ans;

    do {

        cout << "Welcome to the calculator, please enter your calculation and then press enter when you are done." << endl;
        cin >> userInput;

        userInput.erase(remove_if(userInput.begin(), userInput.end(), isspace), userInput.end()); //removes and then erases any spaces in the string
        userInput.erase(remove_if(userInput.begin(), userInput.end(), isalpha), userInput.end()); // removes and then erases any alphabetic charecters
                                                                                                  //this will leave only numbers and operators
        cout << userInput << endl;
        cout << "Would you like to continue?" << endl;
        cout << "Please enter 'y' or 'n'" << endl;
        cin >> ans;

    } while ((ans == 'y')||(ans == 'Y'));

    return 0;
}

共有2个答案

万勇
2023-03-14

因此,在“芭丝谢芭”和“mutantkeyboard”的帮助下,我终于克服了这个问题

我使用了<code>getline</code>,但仅用于第一次用户输入,就像@Bathsheba建议的那样。这对我不起作用,因为我将<code>ans</code>的输入保留为<code>cin</code>。将这两个更改为<code>getline</code>,而不仅仅是其中的一个,并使用一个没有预编译头的空白项目,这为我解决了这个问题。项目现在按预期正确循环。

谢谢大家的帮助!

卫烨
2023-03-14

问题是<code>cin

更改为

std::getline(std::cin,userInput)

这将占用整行输入,并自动为您处理换行符。

为了过上轻松的生活,请用ans做类似的事情。将其重新定义标准::字符串std::字符串甚至有 == 重载为字符类型!

(就我个人而言,我也不会评论标准的<code>#include</code>文件。任何C程序员都应该知道他们“带来了什么”,这可能会在程序扩展时导致错误信息。)

 类似资料:
  • 问题内容: 我正在尝试制作一个暂停用户输入的简单命令。我认为在Bash脚本中它将很有用。 这是我的代码: 它甚至不会暂停供用户输入。 我之前尝试过使用getch()(ncurses)。发生的是,屏幕变黑了,当我按下一个键时,它又回到了原来的屏幕上,我看到了: 这是我想要的。但是我想要的只是DOS / Windows 中的命令(我使用Linux)。 问题答案: 从GNU C库手册: 函数:char

  • 查看图像以供参考。 我是Java的初学者。

  • 本文向大家介绍C#跳过而,包括了C#跳过而的使用技巧和注意事项,需要的朋友参考一下 示例 SkipWhile() 用于排除元素,直到第一个不匹配为止(这对大多数人来说可能很直观)            

  • 问题内容: 我正在尝试使用接收输入: 但是该命令只是被跳过而返回一个空字符串。我怎么解决这个问题? 问题答案: 该方法不会占用整数后的换行符,因此在调用该方法时,它仅读取整数后的换行符。 例 如果您输入以下内容: 该调用使用了而不是换行符: 现在,当您调用它时,它消耗了第一行的其余部分,该行仅包含换行符。 解 尝试丢弃整数后的其余行: 或者使用一致的方式读取每一行,然后自己将字符串解析为整数:

  • 我想对一条消息进行无限循环,如果用户输入一个字符,例如“X”,就停止它。但是它在if语句上得到一个错误,说它是一个不可达的代码。有人能帮帮我吗。

  • 这里是Java新手,尝试扫描下面表单中的输入: 3 3 3 101 000 101 拜托,有更有经验的人能教我如何解决这个问题吗?我发现一些问题与。nextline()和。nextint()有类似的问题,但不完全是这样。不过,如果真的是复制品,我提前道歉... (如果需要,我会添加更多信息)