是否有可能制作一些循环,它不止一次扫描一个数字和一个字符串? (我的部分作业)

问题描述 投票:0回答:2

所以在我的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;
}

//只是代码的“骨架”。还有更多,但在这里我只提交了我正在努力的部分。

例如,如果我运行此代码,我想写一些数字,然后运算符输入到输入中。我希望它打印第一个数字和字符串(只是为了检查循环是否有效)。

但实际上它绝对没有什么,只是给了我一些大的负数作为回报。

c c99
2个回答
1
投票

来自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]);

0
投票

scanf格式字符串中,%s表示您要读取字符串,这意味着它需要放置该字符串的地址。你正在通过op[i][4],这是一个char

© www.soinside.com 2019 - 2024. All rights reserved.