牛客网C++入门 笔记交6.交换两个变量的值

实现交换两个int类型变量的值

解法一、二:swap()函数、变量临时保存

#include <iostream>
using namespace std;

int main() {

    int a = 0;
    int b = 0;
    cin >> a;
    cin >> b;

    //swap(a,b);

    int temp;
    if(a,b){
        temp=a;
        a=b;
        b=temp;
    }else{
        cout<<"请输入整数"<<endl;
            }

    

    cout << a << " " << b << endl;
    
    return 0;
}
问题1:int temp能不能定义到if语句内,有什么区别和影响

        这是变量的作用域的问题。

        将 temp 定义在 if 语句内意味着它的作用域仅限于该 if 语句块内。temp只是用来暂存a变量的值,所有写道if语句里更清晰。

        就这道题而言,将 int temp 定义到 if 语句内并不会带来效率上的提升,只可能会降低代码          的可读性和可维护性。

        但在更复杂的情况下,频繁地在不同的作用域内创建和销毁变量可能会导致不必要的内存分配和释放,从而降低效率。所以一般写到外面更通用。

问题2:如何判断输入的是否为int变量
int a, b;  
cin >> a;  
if (cin.fail()) {  
    cout << "输入错误,请输入整数" << endl;  
    // 清除错误状态  
    cin.clear();  
    // 忽略当前行的剩余输入  
    cin.ignore(numeric_limits<streamsize>::max(), '\n');  
}  
cin >> b;  
if (cin.fail()) {  
    cout << "输入错误,请输入整数" << endl;  
    cin.clear();  
    cin.ignore(numeric_limits<streamsize>::max(), '\n');  
}
cin.fail()

        cin.fail() 是一个成员函数,用于检查输入流 cin 是否处于失败状态.

        当输入操作无法执行时(例如,因为输入的数据类型不匹配),cin 会进入失败状态。

        在这种情况下,cin.fail() 会返回 true

//定义int类型的数据类型
int aaa;


/*********************************************************
通过标准输入流输入数据,这时候可能输入任何东西
流内的数据可以不是int类型,但是我输入的地方是aaa这个int变量
**********************************************************/
cin>>aaa;

所以这时候就可以通过fail()来判断,输入的数据要存到int变量中是不是符合,不符合fail()就会返回给你不符合(true)。

cin.clear()

cin.clear() 是一个成员函数,用于清除输入流 cin 的错误状态。

当 cin 进入失败状态后,它会保持这种状态,直到调用 cin.clear()。清除错误状态后,cin 可以再次用于输入操作。        

//判断输入数据是否符合变量的类型
if(cin.fail()){}

/*****************************************************
如果fail()触发,这时候整个输入流cin就会变成输入失败状态
*****************************************************/



cin.clear();
//把输入流cin的状态改为正常,才能继续使用cin
cin.ignore()

  cin.ignore() 是一个成员函数,用于忽略输入流 cin 中的字符。

        这个函数通常用于在输入错误后清除输入缓冲区,以便程序可以继续读取后续的输入。

//判断输入数据是否符合变量的类型
if(cin.fail()){}

/*****************************************************
如果fail()触发,这时候整个输入流cin就会变成输入失败状态
*****************************************************/



//把输入流cin的状态改为正常,才能继续使用cin
cin.clear();

/*****************************************************
       只是把输入流的状态改为正常
       上一次输入流缓冲区里的数据还没有处理
****************************************************/


//把输入流缓冲区里的数据丢掉,开始新的输入
cin.ignore();

// 忽略直到下一个换行符的所有字符

cin.ignore(numeric_limits<streamsize>::max(), '\n'); 

第一个参数是要忽略的字符的最大数量,第二个参数是用作停止忽略字符的标志的字符。

        最大数量:可以用numeric_limits<streamsize>::max() 表示忽略的最大字符数,这是一个很大的数,实际上表示“忽略尽可能多的字符”

        停止忽略字符的标志的字符:就是在输入流中直到遇到什么,才停止忽略这个动作。

#include <iostream>
#include <limits>
using namespace std;

int main() {

    int a = 0;
    int b = 0;
    cin >> a;
    cin >> b;

if (cin.fail()) {  
    cout << "输入错误,请输入整数" << endl;  
    // 清除错误状态  
    cin.clear();  
    // 忽略当前行的剩余输入  
    cin.ignore(numeric_limits<streamsize>::max(), '\n');  
}  
 
if (cin.fail()) {  
    cout << "输入错误,请输入整数" << endl;  
    cin.clear();  
    cin.ignore(numeric_limits<streamsize>::max(), '\n');  
}

    int temp;
    if(a,b){
        temp=a;
        a=b;
        b=temp;
    }else{
        cout<<"请输入整数"<<endl;
            }

    

    cout << a << " " << b << endl;
    
    return 0;
}

解法三:不增加新的变量

using namespace std;

int main() {

    int a = 0;
    int b = 0;
    cin >> a;
    cin >> b;

    //write your code here.......
    a = a+b;
    b = a-b;
    a = a-b;

    cout << a << " " << b << endl;
    
    return 0;
}
  • a = a + b; 这行代码将 a 和 b 的和赋值给 a
  • b = a - b; 这行代码实际上是在计算 (a + b) - b,即原始的 a 的值,并将其赋值给 b。这样,b 就变成了原来 a 的值。
  • a = a - b; 这行代码是在计算 (a + b) - (原来的 a),即原始的 b 的值,并将其赋值给 a。这样,a 就变成了原来 b 的值。

还是用变量只是存储数据的媒介的思想来实现

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值