1. ホーム
  2. C

C言語におけるいくつかの細かいミス

2022-03-16 17:32:25

< 最初 >

エラーを報告する /Users/zhao95outlook.com/Desktop/ 演習 /lianxi/main.c: 55 : 14 : 式結果未使用

表現結果未使用  識別子 の結果は は使用されません .

状況 : について のループ内で使用されます。     *pl++です。

理由 : 自己増殖する優先順位がプログラミングの秩序を乱す , の最初の実行は pl++を使用します。 アドレスがセルフインクリメントであることを示す , は間違っている .

修正 :(*pl)++;

または :*pl+= 1 ;

< 第二 >

ボイド パンドゥアン( int *pz, int *pf, int *pl, フロート arr[])を使用します。

関数を作成する必要がある , 複数の戻り値が必要 , または戻り値なし , プログラムの実行順に直接実行する . 使用方法 ボイド を開始する関数です。 .

外付けの機能 ボイド 内部宣言ポインタはmain関数を指すことができます。 メイン 受け入れるべき値 .

関数が呼び出されたときに値を代入する必要がある主関数は、その関数の () で型変数名を定義する。 . 上の括弧の中と同様 (....... フロート arr[])

状況 : 関数を呼び出す場合 ,

1 main関数の前には関数ヘッダ宣言があり、呼び出しをハングアップさせることを記憶している           ---> ボイド パンドゥアン( int *pz, int *pf, int *pl, フロート arr[])

2 メイン 内部で関数が呼び出された場合 , ポインタの位置は、次のように書くことを忘れないでください。 ---> panduan(&xxx,&xxx,&xxx,arr);

備考 : 内部で配列を使用する関数を呼び出す , を呼び出すと、配列の名前だけがタイプされます。 , 例えば :arr. を入力することはできません。 arr[]です。

< 第三 を使用します。

:

if (arr[i]) > 0 {
    (*pz)++;
}

エラーを報告する :/Users/zhao95outlook.com/Desktop/ 演習 /lianxi/main.c: 47 : 21 : 期待される表現

期待される表現    期待される 表現 ( 赤色のマーク ) > 数字支出エラーの下にある小さな矢印 .

理由 : もし ブラケット に続いて > 0 使用しない .

修正 : もし (arr[i] > 0 ){ <未定義

    (*pz)++;

}

< 第4回 を使用します。

:   コードセクションのスニペット ->

ボイド パンドゥアン( int *pz, int *pf, int *pl, フロート arr[]){ <未定義

イント main(){ -----> ここでエラーをレッドマークする !!!

エラーを報告する :/Users/zhao95outlook.com/Desktop/ 演習 /lianxi/main.c: 34 : 11 : ここでは関数の定義はできません

ここでは関数の定義はできません

機能 定義 不可 これ

理由 : 前の関数ヘッダを参照するのは , を、最後に中括弧を付けて { , は、関数が終了していないことを示します . システムは次の関数を見つけます。 をメインとします。 これはメイン関数です

そのため、エラーが報告されます。 , main関数はもはやここで定義されるべきではないと考えてください。 ,

修正 : 前の関数の中括弧を追加するだけです .

備考 : 今後、このエラーに遭遇した場合 , 最後の関数の中括弧が完全に終了しているかどうかだけ確認します。 !

< フィフス を使用します。

エラーを報告する :スレッド 1 :EXC_Arithmetic(code=EXC_1386_DIV,subcode=) 0x0 )

意味 : ルートクラッシュ () ウェブで検索しても、明確な翻訳がありません。 , プログラムがクラッシュすることは理解されていますね? ... なんてシンプルで残酷な説明なんだ ~

実際のアプリケーションのコード :

#include <stdio.h>
    int main(){
        for (int i =1; i < 1000; i++) {
            int sum =0;
            for (int k =0; k < i; k++) {
                if (i % k == 0) { ------> error reported!subcode=0x0
                    sum += k;
                }
            }if (i == sum) {
                printf("%d",i);
            }
        }
    }

これは、比較的単純な C 入門言語プログラミング問題 , タイトルはPrint 1000 内の真の要因 . このアルゴリズムでは % タッチ操作 . モジュロや除算の演算で

を入れることはできません。 0 の約数として . このアルゴリズムでは、プログラムがクラッシュしてしまいます .

備考 : もちろん、これは小さな間違いです , 初心者が陥りやすい , また、大規模なコード群の開発において、後から登場する可能性もかなり高いです , 非常に些細なことですが , しかし、ある程度の経験を積んだプログラマーにとっては

また、トラブルシューティングに多くの時間を浪費することもあります。 .

ソリューション : プログラムであることが判明した場合 スレッド 1 :EXC_Arithmetic(code=EXC_1386_DIV,subcode=) 0x0 ) エラーを報告する場合 , まずポインターエラーを探さずに、まず 見つける コードのすべての % そして / 事業内容 . 除数が0か間接的に0かどうかを調べる , これにより、プログラマーはトラブルシューティングの時間を大幅に短縮することができると考えられている ! ~

< 6番目 を使用します。

のために ループの結果、プログラムがエラーになる

#include <stdio.h>
    void panduan(int *pz,int *pl,int *pf,float shuzu[]);
    int main(){
        int z,f,l;
        float arr[5];
        for (int i =1; i <= 5; i++) { ----->problem point
            printf("input bar boy \n");
            scanf("%f",&arr[i]);
        }
        panduan(&z,&l,&f,arr);
        printf("%d %d %d \n",z,l,f);
        return0;
    }
    
    void panduan(int *pz,int *pl,int *pf,float shuzu[]){
        for (int i =0; i < 5; i++) {
            if (shuzu[i] <0) {
                (*pf)++;
            }
            if (shuzu[i] == 0) {
                (*pl)++;
            }
            if (shuzu[i] >0) {
                (*pz)++;
            }
        }
    }

の行です。 C 言語でのプログラミング初級問題 , タイトルを入力します 5 数字 , を決定するための関数を参照する。 5 よりも大きい数はいくつあるか 0 , 未満 0 とゼロに等しい .

状況 : このプログラムでは、次のように入力します。 5 正の数または 5 負の数 , 表示結果では、いずれも 0 ;

理由 : について ループ内 i の初期値に設定されます。 1 , を使用すると、配列への入力をループする際にデータが欠落します。 arr[ 0 ], とすると、この要素は次のように初期化されます。 0 , そのため、いくら正や負の数を入力しても、まずデフォルトで 0.

ソリューション : 置く について ループ内 i に設定します。 int i = 0 ; ループ入力で配列を見逃さない [ 0 ] の代入が必要です。 .