C++加法表达式疑问

请问在第二次循环里面 起始n的值不是已经到了+号这里了吗?感觉应该会出错,为什么num2的值还是对的呢?

//加法表达式
//输入:321+15  输出:336
#include<iostream>
using namespace std;
int main(){
    char num[100];
    int n=0,num1=0,num2=0;;
    while((num[n]=getchar())!='+'){
        num1=num1*10+(num[n]-'0');
        n++;
    }
    while((num[n]=getchar())!='\n'){
        num2=num2*10+(num[n]-'0');
        n++;
    }
    cout<<num1+num2;
}

程序没错啊
n是从加号后面继续读取,当然不用重置

【以下回答由 GPT 生成】

在这段代码中,num数组用来存储输入的字符,n用来记录输入字符的个数。在第一个循环中,输入的字符会被存储到num数组中,然后根据每个字符的ASCII码减去字符’0’的ASCII码来获得对应的数字,并将其累积到num1中。第一个循环会一直执行到遇到字符’+’为止。

然后,在第一个循环结束后,程序会继续执行第二个循环。在第二个循环中,新输入的字符会被存储到num数组的后面,并且n的值也会相应增加。因为第一个循环中的n值会被保留下来,所以第二个循环可以继续从第一个循环结束的位置开始执行。

在第二个循环中,输入的字符会被继续存储到num数组中,并根据每个字符的ASCII码减去字符’0’的ASCII码来获得对应的数字,并将其累积到num2中。这个循环会一直执行到遇到换行符’\n’为止。

所以,尽管第一个循环中的n值被用来记录输入字符的个数,但是它的值并不会影响第二个循环中的执行。因此,num2的值可以正确地被累积计算出来。

综上所述,第二个循环中的n值不会受到第一个循环中的影响,所以num2的值可以正确计算出来,并且不会受到错误的影响。

希望能解答到您的问题。如果还有其他疑问,请随时提出。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

首先,当getchar()读入到'+'时,第一个while()循环结束,此时已经读取了'+',不然你怎么作判断?所以下一次读取是从下一个数字开始读取的,不会出错。
其次,其实不需要这么复杂啊,直接把加号当char类型读取,两个数字分别在它的前面和后面读取,就可以直接相加输出结果了。就像下面这样:

#include <iostream>
using namespace std;

int main(){
    int a,b;
    char fuhao;
    cin >> a >> fuhao >> b;
    cout << a+b << endl;
    return 0;
}