0

我对编程比较陌生,我必须编写一个函数来读取用户的输入并填充两个数组然后比较它们。我想我很困惑的是如何在两个数组中读取。

这是我应该做的,

编写一个 table_diff 函数,比较两个整数数组并返回它们第一个不同处的下标。如果数组相同,则函数应返回 -1 例如:

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");                      
}
4

6 回答 6

1

我认为您想将代码更改为以下内容:

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");                      
}

运算符的*优先级高于++

于 2008-11-12T01:40:13.187 回答
0

这并不能真正回答您的问题,但是在您的“while”条件下,您已经检查了“r!= 1”,因此在 while 块中,检查“if(r == 1) ...”是不必要的,和技术上无法访问的代码。

该计划的重点是什么?现在的样子,你读入数组 ptra 直到一个空行,然后读入 ptrb 直到一个空行......然后你说你需要比较两者,但你的意思是什么?结果应该是什么?逐项比较数组?还是仅按内容而不是按位置?需要更多信息...

于 2008-11-12T01:18:13.213 回答
0

另外,你copy - paste这里有一个案例。你做同样的事情两次。你这样做呢?使用通用代码编写一个函数,并仅使用相应的参数调用它。

于 2008-11-12T01:47:32.813 回答
0

看起来您缺少实际的检查部分。现在您已经读取了每个数组,您应该使用另一个循环遍历它并检查每个数组中的值。

于 2008-11-12T01:55:22.187 回答
0

我不认为 scanf 像你认为的那样工作。不看你如何输入就很难说;为了像这样循环,我认为您需要在每个整数输入后发送一个 EOF(来自标准输入的 CTRL-D)。如果这就是你这样做的方式,那么唯一会终止你的循环的是指针比较。你有一个已知的最大数组大小吗?另一方面,如果您的输入是“1234^D”,那么您最终将得到一个整数 1234 的数组条目,而不是 1、2、3、4。

最后,该 if 语句看起来像是在尝试确定循环退出的原因;如果是这样,它应该在 while 循环之外。

于 2008-11-12T16:16:00.860 回答
0

解决编程循环问题的方法之一是我大约 15 年前在我的一门大学课程中学到的东西。那就是“循环不变量”。

做出一个永远正确的陈述。在循环内部,条件可能会改变,但请确保如果您进行下一次迭代,您的不变量再次有效。

喜欢:

“数组的前 i 个位置相同”

所以从 0 开始(始终为真),并在循环期间首先检查第一个位置是否相同。如果为真,您可以将“i”变量增加一。对 2nd 等做同样的事情。所以基本上 i 变量确定将检查哪个下一个索引。

我相信互联网会提供一些更好的例子,但它可能会帮助你,同时提高你的开发人员技能。

于 2008-12-18T09:37:25.933 回答