几天学习C++的一些小总结1

来源:互联网 发布:星际穿越知乎 编辑:程序博客网 时间:2024/05/17 03:59

输入Input (cin)

int age;
cin >> age;

声明一个整型变量age然后等待用户从键盘输入到cin并将输入值存储在这个变量中。

cin 只能在键盘输入回车键(RETURN)后才能处理前面输入的内容。

当然你声明的是什么类型,就要相应的输入什么类型。

cin和字符串

我们可以像读取基本类型数据一样,使用cin和>>操作符来读取字符串,例如:

cin >> mystring;

但是,cin >> 只能读取一个单词,一旦碰到任何空格,读取操作就会停止。在很多时候这并不是我们想要的操作,比如我们希望用户输入一个英文句子,那么这种方法就无法读取完整的句子,因为一定会遇到空格。

要一次读取一整行输入,需要使用C++的函数 getline,相对于是用cin,我们更建议使用getline来读取用户输入。

例如:

// 读取字符串例子
#include <iostream>
#include <string>
using namespace std;


int main ()
{
  string mystr;
  cout << "What's your name? ";
  getline (cin, mystr);
  cout << "Hello " << mystr << ".\n";
  cout << "What is your favorite color? ";
  getline (cin, mystr);
  cout << "I like " << mystr << " too!\n";
  system("pause");
  return 0;
}

结果:
你可能注意到在上面的例子中,两次调用 getline 函数我们都是用了同一个字符串变量(mystr)。在第二次调用的时候,程序会自动用第二次输入的内容取代以前的内容。


字符串流 (stringstream)

标准头文件 <sstream> 定义了一个叫做 stringstream 的类,使用这个类可以对基于字符串的对象进行像流(stream)一样的操作。这样,我们可以对字符串进行抽取和插入操作,这对将字符串与数值互相转换非常有用。例如,如果我们想将一个字符串转换为一个整数,可以这样写:

string mystr ("1204");int myint;stringstream(mystr) >> myint;

这个例子中先定义了一个字符串类型的对象mystr,初始值为"1204",又定义了一个整数变量myint。然后我们使用 stringstream 类的构造函数定义了这个类的对象,并以字符串变量mystr为参数。因为我们可以像使用流一样使用stringstream 的对象,所以我们可以像使用cin那样使用操作符 >> 后面跟一个整数变量来进行提取整数数据。这段代码执行之后变量 myint 存储的是数值 1204 。



// 字符串流的使用示例
#include <iostream>
#include <string>
#include <sstream>
using namespace std;


int main ()
{
  string mystr;
  float price=0;
  int quantity=0;


  cout << "Enter price: ";
  getline (cin,mystr);
  stringstream(mystr) >> price;
  cout << "Enter quantity: ";
  getline (cin,mystr);
  stringstream(mystr) >> quantity;
  cout << "Total price: " << price*quantity << endl;
    system("pause");
  return 0;
}

结果:


通过使用这种方法,我们可以对用户的输入有更多的控制,因为它将用户输入与对输入的解释分离,只要求用户输入整行的内容,然后再对用户输入的内容进行检验操作。这种做法在用户输入比较集中的程序中是非常推荐使用的。


goto 语句

通过使用goto语句可以使程序从一点跳转到另外一点。你必须谨慎只用这条语句,因为它的执行可以忽略任何嵌套限制。

跳转的目标点可以由一个标示符(label)来标明,该标示符作为goto语句的参数。一个标示符(label)由一个标识名称后面跟一个冒号colon (:)组成。

1.goto 语句可用于跳出深嵌套循环
#include<iostream>  
using namespace std;  
int main()  
{  
for(int i=0;i<2;i++)  
 for(int j=0;j<2;j++)  
  for(int k=0;k<2;k++)  
  {  
         cout<<i*j*k<<" ";  
         if(1==i*j*k)  
            goto part2;//break是跳不出多重循环的   
         }  
         cout<<"此处被省略"<<endl;      
  part2:  
       cout<<"part2"<<endl;  
  system("pause");  

结果:


2.goto语句可以往后跳,也可以往前跳

[cpp] view plaincopyprint?
  1. #include<iostream>  
  2. using namespace std;  
  3.   
  4. int main()  
  5. {  
  6.     int x,sum=0;  
  7.     //定义标号L1  
  8. L1: cout<<"x=";  
  9.     cin>>x;  
  10.     if (x==-1)  
  11.        goto L2;          //当用户输入-1时,转到L2语句处  
  12.     else  
  13.        sum+=x;  
  14.     goto L1;             //只要用户没有输入-1,则转到L1语句处,程序一直将用户的输入默默地累加到变量sum中。  
  15.     //定义标号L2  
  16. L2: cout<<"sum="<<sum<<endl;//一旦转到L2,将输出累计结果,程序运行结束。  
  17.     system("pause");  
  18. }  


3.也可以跳出switch,或者在case之间进行跳转

如:

[cpp] view plaincopyprint?
  1. #include<iostream>  
  2. using namespace std;  
  3.   
  4. int main()  
  5. {  
  6. char a;  
  7. L1:  
  8. cout<<"请输入一个字符"<<endl;  
  9. cin>>a;  
  10. switch(a)  
  11. {  
  12.   case 'a':  
  13.        cout<<"case a"<<endl;  
  14.        goto L1;  
  15.        //break;  
  16.   L2:  
  17.   case 'b':  
  18.        cout<<"case b"<<endl;  
  19.        break;  
  20.   case 'c':  
  21.        cout<<"case c"<<endl;  
  22.     //   break;  
  23.        goto L2;  
  24.   default:  
  25.           break;  
  26. }  
  27.   system("pause");  
  28. }  
  29.     


上述部分内容来自http://blog.csdn.net/generalhking/article/details/8011306

原创粉丝点击