请问在第二次循环里面 起始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;
}