一个scanf()用法的简单有关问题
一个scanf()用法的简单问题
本人想用scanf函数在一行上接收若干个整数类型,但是整数类型的个数不确定。
我用一个int a[1000]数组存储从控制台上接收的数据,即根据用户输入的n,来表示可以输入的行数。
例如:第一行是:12 343 456 342,一共4个数
但是我的第二行是:13 45 657 45 -234,一共五个数据,
那么如果用上边的scanf函数那么第5个数字就无法得到了
求各位大虾给出解决方法。
ps:转换为字符串这条路不行。
------解决方案--------------------
1、痛恨下****又404你懂的
2、楼主的问题是需要输入变长,一种方法是通过输入的数来控制后面的数的个数 例如 4 12 343 456 342
------解决方案--------------------
本人想用scanf函数在一行上接收若干个整数类型,但是整数类型的个数不确定。
我用一个int a[1000]数组存储从控制台上接收的数据,即根据用户输入的n,来表示可以输入的行数。
- C/C++ code
n = 2; while(n--) { scanf("%d%d%d%d",&a[0],&a[1],&a[2],&a[3]);//只能接收4个数据 //do something() }
例如:第一行是:12 343 456 342,一共4个数
但是我的第二行是:13 45 657 45 -234,一共五个数据,
那么如果用上边的scanf函数那么第5个数字就无法得到了
求各位大虾给出解决方法。
ps:转换为字符串这条路不行。
------解决方案--------------------
1、痛恨下****又404你懂的
2、楼主的问题是需要输入变长,一种方法是通过输入的数来控制后面的数的个数 例如 4 12 343 456 342
------解决方案--------------------
- C/C++ code
for(i=0;i<n;i++) scanf("%d",&a[i]);
------解决方案--------------------
可以的。getchar来做嘛。当你遇到空格的时候表示前面的是一个整数和后面的没有关系。遇到回车键就表示换行了
------解决方案--------------------
- C/C++ code
#include <stdio.h> char *p; int i,v,n,k; int a[1000]; char ln[80]; void main() { i=0; while (1) { fgets(ln,80,stdin); if (ln[0]=='\n') break; p=ln; while (1) { k=sscanf(p,"%d%n",&v,&n); // printf("k,v,n=%d,%d,%d\n",k,v,n); if (1==k) { p+=n; a[i]=v; i++; if (i>=1000) break; } else if (0==k) { p++; } else {//EOF==k break; } } if (i>=1000) break; } n=i; for (i=0;i<n;i++) printf("a[%d]=%d\n",i,a[i]); } //输入12 343 456 342回车 //输入13 45 657 45 -234回车 //输入回车 //输出 //a[0]=12 //a[1]=343 //a[2]=456 //a[3]=342 //a[4]=13 //a[5]=45 //a[6]=657 //a[7]=45 //a[8]=-234