簡體   English   中英

如何從用戶掃描兩個陣列?

[英]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 = 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直到空白行...然后您說您需要比較兩者,但是那是什么意思呢? 結果應該是什么? 逐項比較數組? 還是僅按內容而不按位置? 需要更多信息...

另外,您還有一個copy - paste在這里。 您兩次執行相同的操作。 你怎么辦? 用通用代碼編寫一個函數,然后僅使用各自的參數進行調用。

看來您缺少實際的檢查部分。 既然您已經讀完每個數組,則應該遍歷另一個數組並檢查每個數組中的值。

我認為scanf不會像您認為的那樣起作用。 如果不看輸入內容就很難說。 為了這樣循環,我認為您需要在每個整數項之后發送一個EOF(來自stdin的CTRL-D)。 如果那是您的操作方式,那么終止循環的唯一方法就是指針比較。 您是否知道最大陣列大小? 另一方面,如果您輸入的是“ 1234 ^ D”,那么您將以整數1234而不是1,2,3,4的一個數組條目結束。

最后,該if語句看起來像是您要確定退出循環的原因; 如果是這樣,它應該在while循環之外。

解決循環中的問題的方法之一是大約15年前在我的一門大學課程中學到的東西。 那就是“ 循環不變式 ”。

做出永遠是正確的聲明。 在循環內部,條件可能會更改,但是請確保如果執行下一次迭代,則您的不變式再次有效。

喜歡:

“數組的第一個i位置相同”

因此從0開始(始終為true),並在循環期間首先檢查第一個位置是否相同。 如果為true,則可以將'​​i'變量加1。 對2nd等進行相同的操作。因此,基本上,i變量確定將檢查哪個下一個索引。

我敢肯定,互聯網將提供一些更好的示例,但它可能對您有所幫助,同時又可以提高您的開發人員技能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM