如何扫描用户的两个数组?

How to scan in two arrays from user?

提问人: 提问时间:11/12/2008 最后编辑:7 revs, 4 users 60%Travis G 更新时间:12/18/2013 访问量:1290

问:

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

这是我应该做的,

编写一个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");                      
}
c 数组 循环 用户输入

评论

0赞 11/12/2008
点击错了,谢谢乔纳森!
0赞 SoapBox 11/12/2008
我有点难以弄清楚问题到底是什么......您已经发布了代码,看起来它应该可以在 2 个数组中工作和读取。问题是什么?它不编译吗?它不做你想做的事,如果是这样,如何做?
0赞 11/12/2008
是的,它没有做我想做的事,我不确定我是否正确编码了它。但它编译得很好,但是当我运行它时,它应该读入值,直到输入一个值来终止该数组,但它只允许我输入几个值然后重新开始。这可能很容易,但还没有运气

答:

0赞 CodingWithSpike 11/12/2008 #1

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

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

评论

0赞 11/12/2008
这是我应该做的:编写一个table_diff函数,比较两个整数数组并返回它们不同的第一个位置的下标。如果数组相同,则函数应返回 -1 ex: 345 & 345 --> -1 345 & 346 --> 2 1234 & 123 --> 3
1赞 Daniel Spiewak 11/12/2008 #2

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

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

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

0赞 Svante 11/12/2008 #3

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

0赞 Karl #4

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

评论

0赞 11/12/2008
你的意思是比较数组吗?我必须编写函数来比较两者,并完成此操作。我必须编写这个“table_fill”函数来读取要比较的值
0赞 mbyrne215 11/13/2008 #5

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

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

评论

0赞 11/13/2008
谢谢!这让事情变得很清楚。我犯了一个愚蠢的错误,假设我需要两个 while 循环或两个函数,而我可以只有一个 while 循环并调用它两次。感谢您的帮助!
0赞 Roalt #6

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

做一个永远正确的陈述。在循环中,条件可能会发生变化,但请确保在进行下一次迭代时,您的不变量再次有效。

喜欢:

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

因此,从 0(始终为 true)开始,在循环过程中首先检查第一个位置是否相同。如果为 true,则可以将“i”变量增加 1。对第二个执行相同的操作,依此类推。因此,基本上 i 变量决定了将检查哪个下一个索引。

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