是否可以使某个循环多次扫描一个数字和一个字符串? (我的作业的一部分)

时间:2019-04-24 12:29:47

标签: c c99

因此,在我的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;
}

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

例如,如果我运行此代码,我想在输入中写一些数字,后跟运算符。 我希望它能打印出第一个数字和字符串(只是检查循环是否起作用)。

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

2 个答案:

答案 0 :(得分: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]);

答案 1 :(得分:0)

scanf格式的字符串中,%s表示您要读取一个字符串,这意味着它需要将该字符串放在何处的地址。您正在为此传递op[i][4],即char