c - 如何在事先不知道长度的情况下要求用户输入?在 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;
}
}
如何正确请求输入?提前致谢。
解决方案
你可以使用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
推荐阅读
- node.js - 获取从 azure 主题获取消息的订阅客户端中的总消息计数
- python-3.x - Python对具有不同属性的标签进行排序
- c# - 如何检查外部进程打开的excel文件
- python-3.x - “系列”对象python中的日期季度
- python - Keras InvalidArgumentError:不兼容的形状:[1,8,32] 与 [1,10,32]
- petapoco - 在 PetaPoco 中,如何定义具有 2 个主键的表?
- xamarin - 如何以编程方式在 Xamarin android 中设置重力
- c++ - 从容器中的 xml 文件中提取非同质顺序数据
- function - 在 clojure 函数中使用过滤器
- angular - 在 Angular 中使用 Map 运算符转换对象