使用函数的 C++ 字符串输入

Posted

技术标签:

【中文标题】使用函数的 C++ 字符串输入【英文标题】:C++ string input using functions 【发布时间】:2012-10-05 04:33:03 【问题描述】:

我已经编写了一个代码,用于在 C++ 中从用户那里获取字符串。这是代码

#include<iostream>
#include<string>
using namespace std;
string input;
void enterstring()

    cout<<"\nEnter input: ";
    getline(cin,input);


void displaystring()

    cout<<"\nyour string is "<<input<<endl;



    int main()

int choice=0;
while(choice!=3)


    cout<<"Enter choice: "<<;
          cin>>choice;
    switch(choice)
    
        case 1: enterstring();
        break;
        case 2: displaystring();
        break;
        case 3: cout<<"\nQuit";
        break;
        default: cout<<"\ninvalid choice try again";
        break;


    
    return 0;

以上代码的输出:

Enter choice: 1
Enter input: 
Enter choice:

输入部分被跳过我不知道为什么问题出在哪里。逻辑错了,语法有什么问题。当我在不使用 while 循环等的情况下调用函数时,它工作正常,但在这种情况下它不起作用。帮帮我。

【问题讨论】:

尝试在 enterString() 函数中使用cin&gt;&gt;input; A program shall contain a global function called main , which is the designated start of the program. --ISO/IEC 14882-2011 3.6.1 p1 @Shashwat 在我写一个字符串时使用了 cin>>输入假设“世界上到处都是自私的人”进入空格会产生无限循环。为了避免这种情况,我使用了 getline。 但我的程序包含主要功能。 @pwned。 我很惊讶为什么它跳过了主要功能..很奇怪。我编辑了很抱歉@Shashwat 【参考方案1】:

问题是您将选择读取为 int,但输入是带有换行符的字符串。

在您的示例中,输入不是 1 是 "1\n" 1 选择为 int,'\n' 在缓冲区中。当您调用该函数从缓冲区读取的 getline 函数时,找到换行符并返回一个空字符串。 为避免这种情况,您应该将选项读取为字符串,而不是使用 atoi 强制转换为 int。

编辑:

你是对的。它仍然无法正常工作。但是这里有一个可以工作的版本。

#include <iostream>
#include <string>

using namespace std;
string input;
void enterstring()
    cout<<"\nEnter input: ";
    cin.ignore();
    getline(cin,input);


void displaystring()
    cout<<"\nyour string is "<<input<<endl;


int main()
    int choice=0;
    while(choice!=3)
        cout<<"Enter choice: ";
        cin>>choice;
        switch(choice)
            case 1: enterstring();
            break;
            case 2: displaystring();
            break;
            case 3: cout<<"\nQuit";
            break;
            default: cout<<"\ninvalid choice try again";
            break;
        
    
    return 0;

【讨论】:

使用选择作为字符串,然后使用 atoi 将其转换为 int 。它仍然跳过输入部分。 :) 这里的所有答案都没有奏效。 感谢新代码。 :) 但是此代码仅在您键入不带空格的字符串时才有效,例如“thisistheworldfullofgoodpeople”,每当您键入字符串时,例如“这是一个充满好人的世界”,您将受到无限循环... :D 这就是我使用 getline( ); 对.. 现在它已修复。 cin.ignore() 将在读取之前清除缓冲区中的任何内容 我的问题已经解决了 :) 非常感谢。意味着每次我不得不使用 cin.ignore() 以摆脱缓冲区中的所有内容..! 好的,如果问题解决了别忘了接受答案。【参考方案2】:

您发布的代码无效:您在Enter choice : 之后缺少"

除此之外,您的代码似乎可以在 ideone 中运行(我添加了一些缩进并纠正了一些小错误。我还添加了一个 main 函数)。你可以在这里看到它:http://ideone.com/ozvB1

【讨论】:

对不起,我在输入选项后忘记写“,这是我在这里输入的时候。我在我的代码中检查了它”存在。但除此之外它不起作用。

以上是关于使用函数的 C++ 字符串输入的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 if 函数没有从字符串中删除空格?它不能检测 C++ 中的空格输入吗?有没有办法从输入中删除空间

vigenere cipher 的 C++ 函数仅有时有效(适用于某些输入,跳过其他输入)

如何修复这个结构字符串函数 C++? [复制]

C++学习46 getline()函数读入一行字符 一些与输入有关的istream类成员函数

从 C++ 函数返回一个字符串

字符串输入输出