我必须阅读不同的不。在一种情况下读取两个整数的输入,在另一种情况下读取整数等等
以下是我想要实现的输入类型。这个例子有6行。
示例输入
1 1 1 2
1 1 2 5
1 2 3 4
2 3
2 4
1 5 5 4
我的代码
#include <stdio.h>
typedef long long int LLI;
int main(void)
{
LLI n,q,i,j,w,x,y,z,t;
scanf("%lld %lld",&n,&q);
LLI d[n],s[n];
for(i=0;i<q;i++)
{
// I don't know how to do this? The code below is what I have tried:
scanf("%lld %lld %lld %lld",&w,&x,&y,&z);
printf("%lld %lld %lld %lld \n",w,x,y,z);
}
return 0;
}
示例输入
5 14
1 1 1 2
1 1 2 5
1 2 3 4
1 2 4 7
2 3
2 4
1 5 5 4
2 5
2 6
1 7 5 8
2 7
2 8
2 9
2 10
答案 0 :(得分:2)
如果您的代码仅在Linux,BSD和Mac OS X等POSIXy系统上运行,则使用fgets()
(或getline()
来读取每一行。第一行将包含包含数据的行数。
要处理每一行(具有不同数量的值),您可以sscanf()
与%n
一起使用来确定消费的字符数,strtol()
,strtoul()
或strtod()
。在所有情况下,您尝试转换一个值,跟踪成功转换消耗原始字符串的数量,相应地推进字符串的开始以进行下一次转换。重复直到转换失败。 (然后,您可以检查转换是否因字符串结尾而失败,或者该行是否包含非值数据,即垃圾或注释。)
答案 1 :(得分:0)
使用 int array 可以读取多个输入。堆栈溢出How can I read a varying amount of integer input in C?
的参考链接示例示例:
#include <stdio.h>
int main()
{
int ele,num,i;
printf("Enter the elements...\n");
scanf("%d",&ele);
int arr[ele];
for (i=0; i<ele;i++)
{
scanf("%d",&num);
arr[i] = num;
}
}
答案 2 :(得分:0)
首先,您可以动态地将指针数组分配给int。
例如
size_t nRows = 0;
scanf( "%zu", &nRows );
int **a = malloc( nRows * sizeof( int * ) );
然后,您可以为数组中的每个“行”分配一个指针,该指针将指向将包含行中元素数量的对象
for ( size_t i = 0; i < nRows; i++ )
{
a[i] = calloc( 1, sizeof( int ));
}
最后,当你要连续读取数字时,你需要使用realloc
并增加第一个元素。
这就是每一行都有这个结构
number_of_elements_in the_row, number1, number2, ...
另一种方法是使用具有灵活数组的动态分配的结构数组。例如
struct row { size_t n; int values[]; };
size_t nRows = 0;
scanf( "%zu", &nRows );
row *a = malloc( nRows * sizeof( row ) );