所以在我的CS课程中,我们必须制作一个读取输入的计算器,然后在读取符号后计算结果。输入始终由一个数字后跟运算符组成。
我现在正在努力扫描输入的方式。我想使用一些循环,它总是存储它像:
scanf("%lf %s ", &in, c);
注意:计算器接着一个操作。因此,在下面的示例中,加号仅适用于20和4,然后结果采用除法符号并除以8.然后新结果被'neg'字符串否定。
例如:输入:20 + 4/8 neg =输出:结果:-3
这就是我试图解决它的方式。我的目的是使循环将每个数字存储到一个新的数组“框”中,然后将每个字符串存储到char数组的新“行”中。 op数组中的4用于设置字符串的最大长度,因为我知道可以出现的最长字符串是“sqrt”。我看到for的条件中的'\ n'可能是无用的,但无法弄清楚如何做到这一点......
我正在考虑使用for或while循环。
int main(){
double in[10];
char op[5][4];
for(int i=0; i<5;i++){
scanf("%lf %s ", &in[i], op[i][4]);
}
printf("%.3f %s", in[0], op[0][0]);
return 0;
}
//只是代码的“骨架”。还有更多,但在这里我只提交了我正在努力的部分。
例如,如果我运行此代码,我想写一些数字,然后运算符输入到输入中。我希望它打印第一个数字和字符串(只是为了检查循环是否有效)。
但实际上它绝对没有什么,只是给了我一些大的负数作为回报。
来自scanf的手册页
int scanf(const char *format, ...);
你可以看到第一个参数是const char *
类型,即你需要提供有效的地址。
有了这个
char op[5][4]; /* 5 char array, in each char array you can have 4 char's
* i.e op[row][0] to op[row][3]. There is no op[i][4]
*/
你可以有
for(int i=0; i<5;i++){
scanf("%s",op[i]); /* op[i] itself address, so don't need & */
}
要么
for(int i=0; i<5;i++){
for(int j=0; j<4; j++) {
scanf(" %c", &op[i][j]); /* storing char by char */
}
}
同时在这里打印使用%c
作为op[0][0]
是char
类型。
printf("%.3f %c", in[0], op[0][0]);
在scanf
格式字符串中,%s
表示您要读取字符串,这意味着它需要放置该字符串的地址。你正在通过op[i][4]
,这是一个char
。