使用函数的 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>>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++ 函数仅有时有效(适用于某些输入,跳过其他输入)