鱼C论坛

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

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

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

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

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

x
是小甲鱼C++快速入门视频里面的,全部代码有点长,就放了main部分

  1. #include<iostream>
  2. #include<fstream>
  3. #include<windows.h>

  4. struct student
  5. {
  6. int num;
  7. std::string name;
  8. char sex;
  9. };
  10. bool initstu();
  11. bool Readstu();
  12. void Recordstu();
  13. bool Writestu(student *studata);


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


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

我是菜鸟...还没看懂~!要努力!
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-5-15 09:58:16 | 显示全部楼层
我只是路过打酱油的。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-5-15 23:13:40 | 显示全部楼层
求助。。。:'(
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-5-16 15:53:27 | 显示全部楼层
第一个问题:可以用do....while循环来实现
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-5-16 16:01:01 | 显示全部楼层
第二个问题:你的输入是用std::cin.get();吗?这个貌似已空格跟换行为结束标志。。遇到空格就算结束了~~~
小甲鱼最新课程 -> https://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;
}
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-5-17 11:21:26 | 显示全部楼层
414467879 发表于 2013-5-16 16:02
看看这段程序,对第二个问题有帮助
#include
#include
  1. #include<iostream>
  2. #include<fstream>
  3. #include<windows.h>

  4. struct student
  5. {
  6.         int num;
  7.         std::string name;
  8.         char sex;
  9. };
  10. bool initstu();
  11. bool Readstu();
  12. void Recordstu();
  13. bool Writestu(student *studata);


  14. int main()
  15. {       
  16.         int i;
  17.         initstu();
  18.                 std::cout<<"please have your choice[WARNING:INPUT NUMBERS!]:\n";
  19.                 std::cout<<"1.print data.\n";
  20.                 std::cout<<"2.input data.\n";
  21.                 std::cout<<"3.quit.\n";
  22.                   std::cin>>i;
  23.         do
  24.         {
  25.                 printf("please try again!\n");
  26.                 std::cin>>i;
  27.                
  28.         }
  29.         while(i!=1 || i!=2 || i!=3);
  30.                
  31.                 switch(i)
  32.                 {               
  33.                         case 1:        if (Readstu())
  34.                                         {
  35.                                                 std::cout<<"read success!\n\n";
  36.                                         }
  37.                                         else
  38.                                         {
  39.                                                 std::cout<<"read failed!\n\n";       
  40.                                         }
  41.                                         break;
  42.                         case 2: Recordstu(); break;
  43.                         case 3: return (0);
  44.                 }
  45.                                
  46.                 return (0);
  47. }
复制代码
多谢你的解答,看明白了,上面是我修改后的代码
但是还有个小问题,就是这里的std::cin  要求用户输入的时候 ,是不是因为事先定义了i 是整型,所以如果用户输入字母或者胡乱输入就会出现死循环现象?那为了程序的健壮性,应该用什么方法来避免呢?
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-5-17 11:25:06 | 显示全部楼层
414467879 发表于 2013-5-16 16:01
第二个问题:你的输入是用std::cin.get();吗?这个貌似已空格跟换行为结束标志。。遇到空格就算结束了~~~

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

上面的问题能解决不?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2013-5-19 22:43:06 | 显示全部楼层
强烈支持楼主ing……
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

能给个具体实现不?do while  貌似写不出。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-5-20 20:39:02 | 显示全部楼层
无回帖,不论坛,这才是人道。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-5-20 22:54:29 | 显示全部楼层
楼主加油,鱼C加油!我们都看好你哦!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-1 05:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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