从标准输入读取整数并保存它们 - C

问题描述:

第一行输入包含一个整数。每个输入之后是包含两个整数的行,每个整数不大于1 000 000.第一个整数n是向量的大小,第二个整数m是寄存器信息的行数。以下每行都包含两个表示这个的整数x和y。一行中的任何两个整数由一个空格分隔。这些行不包含其他字符,除了已完成的新行从标准输入读取整数并保存它们 - C

所以我选择x作为向量中的位置。 x被存储在num1my_struct结构和y存储在num2

typedef struct my_struct{ 
    int num1; 
    int num2; 
    bool my_bool; 
} my_struct; 


int main(){ 
    int testCase, sizeVector, numLines, num1_in, num2_in, linesScanned = 0; 
    scanf("%d\n %d %d", &testCase, &sizeVector, &numLines); 

    my_struct my_vector[sizeVector+1]; 

    my_vector[0].num1 = testCase; 
    my_vector[0].num2 = 0; 
    my_vector[0].my_bool = false; 

    while (linesScanned < numLines) { 
     scanf("%d %d\n ", &num1_in, &num2_in); 
     my_vector[num1].num1 = num1_in; 
     my_vector[num1].num2 = num2_in; 
     my_vector[num1].my_bool = false; 
     linesScanned++; 

    }} 

输入例如:

1 
3 2 
1 2 
2 3 

我的问题是,第一scanf效果很好,但对循环没有按”吨。它没有保存价值,因为它应该

+0

是什么'num1'(你使用作为'my_vector'的指数之一)? – varnie 2013-03-12 16:47:33

+0

是的,这就是我使用它的原因。 – FriedRike 2013-03-12 16:58:25

+0

我的意思是,你不增加它,是吗?在您显示的代码中,不清楚它是否在每次迭代中更新。所以,看起来你在每次迭代时都会覆盖'my_vector'的特定项目。 – varnie 2013-03-12 17:00:18

更改第二scanf()

scanf("%d %d\n ", &num1_in, &num2_in); 

通过

scanf(" %d %d", &num1_in, &num2_in); 

事实上,在你的第二个scanf()你不开始阅读之前赶上新线整数。 (空格,制表新生产线在你输入进入,但它不是逮住既不在第一scanf()也不在你的第二个scanf()

添加空间的字符串格式的开始你的第二个scanf()会抓住任何空白,新行......)

+0

它的工作!谢谢! – FriedRike 2013-03-12 16:57:46

+0

不客气 – MOHAMED 2013-03-12 16:58:34

+0

这不是'scanf'的工作方式,但在这个特定的输入中并不重要。 – teppic 2013-03-12 17:07:13

更改您的代码以摆脱您的scanf函数中的\n。事实上,你也可以摆脱这些空间。当使用%d时,输入中的所有空白都将被忽略。

你也不会增加你的数组索引。

+0

它的工作!谢谢!感谢您对索引 – FriedRike 2013-03-12 16:59:03

你的第二个scanf应该是:

scanf(" %d %d", &num1_in, &num2_in); 
+0

的提醒!谢谢! – FriedRike 2013-03-12 16:56:08