提问人: 提问时间:11/12/2008 最后编辑:7 revs, 4 users 60%Travis G 更新时间:12/18/2013 访问量:1290
如何扫描用户的两个数组?
How to scan in two arrays from user?
问:
我对编程比较陌生,我必须编写一个函数来读取用户的输入并填充两个数组,然后比较它们。我想我感到困惑的是如何在两个数组中读取。
这是我应该做的,
编写一个table_diff函数,用于比较两个整数数组,并返回它们不同的第一个位置的下标。如果数组相同,则该函数应返回 -1 ex:
345 & 345 --> -1 (相同)
345 & 346 --> 2 (索引 2 不同)
1234 & 123 --> 3 (索引 3 不同)
这就是我所拥有的,任何帮助都不胜感激!
while((r = scanf("%i", &value)) != 1 && ptra < endptra)
{
*ptra ++ = value;
if (r==1)
printf("No room after reading values\n\n");
else if(r != EOF)
printf("invalid char");
}
while((r = scanf("%i\n", &value))!= 1 && ptrb < endptrb){
*ptrb ++ = value;
if (r==1)
printf("No room after reading values\n\n");
else if(r != EOF)
printf("invalid char");
}
答:
这并不能真正回答您的问题,但是在您的“while”条件下,您已经检查了“r != 1”,因此在while块中,检查“if(r == 1)...”是不必要的,并且在技术上无法访问的代码。
该计划的意义何在?现在的样子是,你读入数组 ptra 直到一个空行,然后读入 ptrb 直到一个空行......然后你说你需要比较两者,但你这是什么意思?结果应该是什么?逐项比较数组?还是仅按内容而不是按位置?需要更多信息...
评论
我认为您想将代码更改为以下内容:
while((r = scanf("%i", &value)) != 1 && ptra < endptra)
{
*(ptra++) = value;
if (r==1)
printf("No room after reading values\n\n");
else if(r != EOF)
printf("invalid char");
}
while((r = scanf("%i\n", &value))!= 1 && ptrb < endptrb){
*(ptrb++) = value;
if (r==1)
printf("No room after reading values\n\n");
else if(r != EOF)
printf("invalid char");
}
运算符的优先级高于 。*
++
另外,你有一个案例。你做同样的事情两次。你这样做是做什么的?使用通用代码编写一个函数,并仅使用相应的参数调用它。copy - paste
看起来您缺少实际的检查部分。现在你已经读取了每个数组,你应该用另一个循环遍历它,并检查每个数组中的值。
评论
我不认为 scanf 像你想象的那样工作。如果不看到你是如何做你的输入的,就很难说;为了像这样循环,我认为您需要在每个整数条目之后发送一个 EOF(来自 stdin 的 CTRL-D)。如果这就是你的做法,那么唯一会终止循环的就是指针比较。您是否有已知的最大数组大小?另一方面,如果你的输入是“1234^D”,你最终会得到一个整数 1234 的数组条目,而不是 1,2,3,4。
最后,if 语句看起来像您正在尝试确定循环退出的原因;如果是这样,它应该在 while 循环之外。
评论
解决编程循环问题的方法之一是我在大约 15 年前的一门大学课程中学到的东西。这就是“循环不变性”。
做一个永远正确的陈述。在循环中,条件可能会发生变化,但请确保在进行下一次迭代时,您的不变量再次有效。
喜欢:
“数组的前 i 个位置相同”
因此,从 0(始终为 true)开始,在循环过程中首先检查第一个位置是否相同。如果为 true,则可以将“i”变量增加 1。对第二个执行相同的操作,依此类推。因此,基本上 i 变量决定了将检查哪个下一个索引。
我相信互联网会提供一些更好的例子,但它可能会帮助你,同时提高你的开发人员技能。
上一个:创建具有指定数量的元素的数组
下一个:如何使循环并排运行?
评论