鱼C论坛

 找回密码
 立即注册
查看: 5970|回复: 23

C++中关于字符串的问题

[复制链接]
发表于 2013-5-14 15:02:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
是小甲鱼C++快速入门视频里面的,全部代码有点长,就放了main部分
#include<iostream>
#include<fstream>
#include<windows.h>

struct student
{
int num;
std::string name;
char sex;
};
bool initstu();
bool Readstu();
void Recordstu();
bool Writestu(student *studata);


int main()
{ 
int i;
initstu();
std::cout<<"please have your choice[WARNING:INPUT NUMBERS!]:\n";
std::cout<<"1.print data.\n";
std::cout<<"2.input data.\n";
std::cout<<"3.quit.\n";
std::cin>>i;
switch(i)
{ 
case 1: if (Readstu())
{
std::cout<<"read success!\n\n";
}
else
{
std::cout<<"read failed!\n\n"; 
}
break;
case 2: Recordstu(); break;
case 3: return (0);
default: std::cin.get();
std::cout<<"error,please start again!\n ";
}
return (0);
} 
有两个问题:
①在这里的switch循环里面 我希望如果用户输入的是1,2,3以外的任意字符,包括字母,都会提示重新输入,请问要如何实现?要避免出现无限循环啊
②关于对string name 变量进行输入的话,要如何修改才能让输入的姓名当中可以包含空格?我曾修改为字符型数组,但是貌似也不行,系统只取空格之前的字符。


求大神支招
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-14 17:10:47 | 显示全部楼层
强烈支持楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-14 17:16:22 | 显示全部楼层
我只是路过打酱油的。我不得不说了……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2013-5-14 23:49:29 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-15 00:04:33 | 显示全部楼层
全部代码有点长,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-15 00:44:17 | 显示全部楼层
pcfate 发表于 2013-5-14 23:49
不得不说什么= =???

我是菜鸟...还没看懂~!要努力!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-15 09:58:16 | 显示全部楼层
我只是路过打酱油的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2013-5-15 23:13:40 | 显示全部楼层
求助。。。:'(
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-16 15:53:27 | 显示全部楼层
第一个问题:可以用do....while循环来实现
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-16 16:01:01 | 显示全部楼层
第二个问题:你的输入是用std::cin.get();吗?这个貌似已空格跟换行为结束标志。。遇到空格就算结束了~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-16 16:02:38 | 显示全部楼层
看看这段程序,对第二个问题有帮助
#include<iostream>
#include<string>
using namespace std;
void main()
{
string  s1,s3;
char  s2[40];
cout<<"请输入任意三个姓名:"<<endl;
getline(cin,s1); //可以含有空格字符
cin.getline(s2,40); //可以含有空格字符
cin>>s3;  // 不可以含有空格字符
cout<<"下面输出姓名:"<<endl;
cout<<s1<<endl;
cout<<s2<<endl;
cout<<s3<<endl;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2013-5-17 11:21:26 | 显示全部楼层
414467879 发表于 2013-5-16 16:02
看看这段程序,对第二个问题有帮助
#include
#include
#include<iostream>
#include<fstream>
#include<windows.h>

struct student
{
        int num;
        std::string name;
        char sex;
};
bool initstu();
bool Readstu();
void Recordstu();
bool Writestu(student *studata);


int main()
{        
        int i;
        initstu();
                std::cout<<"please have your choice[WARNING:INPUT NUMBERS!]:\n";
                std::cout<<"1.print data.\n";
                std::cout<<"2.input data.\n";
                std::cout<<"3.quit.\n";
                  std::cin>>i;
        do
        {
                printf("please try again!\n");
                std::cin>>i;
                
        }
        while(i!=1 || i!=2 || i!=3); 
                
                switch(i)
                {                
                        case 1:        if (Readstu())
                                        {
                                                std::cout<<"read success!\n\n";
                                        }
                                        else
                                        {
                                                std::cout<<"read failed!\n\n";        
                                        }
                                        break;
                        case 2: Recordstu(); break;
                        case 3: return (0);
                }
                                
                return (0);
}
多谢你的解答,看明白了,上面是我修改后的代码
但是还有个小问题,就是这里的std::cin  要求用户输入的时候 ,是不是因为事先定义了i 是整型,所以如果用户输入字母或者胡乱输入就会出现死循环现象?那为了程序的健壮性,应该用什么方法来避免呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2013-5-17 11:25:06 | 显示全部楼层
414467879 发表于 2013-5-16 16:01
第二个问题:你的输入是用std::cin.get();吗?这个貌似已空格跟换行为结束标志。。遇到空格就算结束了~~~

另外再问一个,用getline()函数时,里面的第二个参数是不是一定要是字符串?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-17 16:50:29 | 显示全部楼层
可以加个判断语句,提示用户输入错误的话请在重新输入
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2013-5-19 21:42:12 | 显示全部楼层
midiexiang 发表于 2013-5-17 16:50
可以加个判断语句,提示用户输入错误的话请在重新输入

上面的问题能解决不?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-5-19 22:10:08 | 显示全部楼层
虽然我不清楚,没学过C++, 不过我觉得:
1. 不是有一个函数叫做isdigit()吗, 是用来判断你输入的是否是数字的, 是的话会返回true
2.如果要让姓名包含空格, 可以用string字符串类型啊, 只是输入的时候用
     getline(std::cin, name)就行, 会读取空格的, 遇到回车后结束输入;
就这样, 希望能帮到你。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-5-19 22:43:06 | 显示全部楼层
强烈支持楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-20 14:13:20 | 显示全部楼层
midiexiang 发表于 2013-5-17 16:50
可以加个判断语句,提示用户输入错误的话请在重新输入

能给个具体实现不?do while  貌似写不出。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-5-20 20:39:02 | 显示全部楼层
无回帖,不论坛,这才是人道。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-5-20 22:54:29 | 显示全部楼层
楼主加油,鱼C加油!我们都看好你哦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-17 05:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表