首页 > 解决方案 > 如何在事先不知道长度的情况下要求用户输入?在 C 中

问题描述

我希望用户输入形式为 {{a,b},{c,d}} 的单行来表示一个矩阵。矩阵的维度是已知的。使用 getchar(),我无法处理整数大于 9 的情况,而不会绕道而行。使用 scanf(),它会在每次使用这个函数后换行。如何正确请求这种格式的输入?在我看来,必须有一些比 getchar() 更简单的方法。

如前所述,我尝试使用适用于单个数字整数的 getchar() 循环,但是当考虑多个数字时,循环的长度会变得不正确。然后,我尝试了下面的代码,但这似乎也不起作用。

int i=0;
int j=0;
for (int k=0;k<loopSize;k++){
     scanf("%d%c",&element,&c);
         matrix[i][j]=element;
         j++;
         if (j%columns==0){
            i++;
            j=0;
         }
}

如何正确请求输入?提前致谢。

标签: cinput

解决方案


你可以使用getchar()如下

int val = 0;
int number = 0;
int dimLevel = 2;
int state = 0; // 

while ((val = getchar()) != '\n){

    if (val == '{' && state <= dimLevel){
       state++;
    }
    else if (val == '}' && state > 0){
       state--;
    }
    else if (val == ',' && state == dimLevel){
       matrix[i][j] = number;
       number = 0;

       if (j%columns==0){
          i++;
          j=0;
       }
    }
    else if (isdigit(val) && state == dimLevel){
       number = number*10 + (val-'0');
    }
    else if (val == '-' && state == dimLevel){
       number *= -1;
    }
}

if (number && state == 0)
   matrix[i][j] = number; //last number

推荐阅读