0

私はプログラミングに比較的慣れていないため、ユーザーからの入力を読み取り、2 つの配列を埋めてから比較する関数を作成する必要があります。私が混乱しているのは、両方の配列を読み取る方法だと思います。

これは私がやるべきことです。

整数の 2 つの配列を比較し、それらが異なる最初の場所の添え字を返す 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

プログラミングのループに関する問題を解決する方法の 1 つは、約 15 年前に大学のコースで学んだことの 1 つです。それが「ループ不変条件」です。

常に真であるという声明を 1 つ作成します。ループ内で条件が変わる可能性がありますが、次の反復を行う場合は、不変条件が再び有効であることを確認してください。

お気に入り:

「配列の最初の i 位置は同じです」

したがって、0 (常に true) から開始し、ループ中に最初の位置が同じかどうかを最初に確認します。true の場合、「i」変数を 1 増やすことができます。2nd などでも同じことを行います。したがって、基本的に i 変数は、次のどのインデックスがチェックされるかを決定します。

インターネットでより良い例が提供されると確信していますが、それはあなたを助け、同時に開発者のスキルを向上させるかもしれません.

于 2008-12-18T09:37:25.933 に答える
0

また、copy - pasteこちらのケースもございます。同じことを2回します。それで何をしますか?共通コードで関数を記述し、それぞれのパラメーターだけで呼び出します。

于 2008-11-12T01:47:32.813 に答える
0

実際のチェック部分が欠けているようです。各配列を読み取ったので、別のループで配列全体を歩き、それぞれの値を確認する必要があります。

于 2008-11-12T01:55:22.187 に答える
0

これはあなたの質問に実際には答えませんが、「while」条件では、すでに「r != 1」をチェックしているため、while ブロック内で「if(r == 1) ...」をチェックする必要はありません。技術的に到達できないコード。

プログラムのポイントは何ですか?今の見た目では、配列 ptra を空行まで読み込んでから、ptrb を空行まで読み込んで、2 つを比較する必要があると言っていますが、それはどういう意味ですか? 結果はどうあるべきですか?配列をアイテムごとに比較しますか? それとも位置ではなく内容だけですか?さらに情報が必要です...

于 2008-11-12T01:18:13.213 に答える
0

scanf は、あなたが考えているようには機能しないと思います。あなたがどのように入力を行っているかを見ずに言うのは難しいです。そのようにループするには、すべての整数エントリの後に EOF (標準入力から CTRL-D) を送信する必要があると思います。それがあなたのやり方である場合、ループを終了させる唯一のものはポインター比較です。既知の最大配列サイズはありますか? 一方、入力が "1234^D" の場合、1,2,3,4 ではなく、整数 1234 の 1 つの配列エントリになることになります。

最後に、この if ステートメントは、ループが終了した理由を特定しようとしているように見えます。その場合は、while ループの外側にある必要があります。

于 2008-11-12T16:16:00.860 に答える