1

私は C でコーディングする方法を学んでいます。それは私の最初の非 Web 言語であり、良いスタートを切れていません。

次のコードがあります。

//
//  main.c
//  Greeting
//
//  Created by Austen on 2013-06-27.
//  Copyright (c) 2013 Austen. All rights reserved.
//

#include <stdio.h>

int main()
{
    int confirm[100];
    char name[100];
    char mood[100];

    printf( "Please enter your name: " );
    scanf("%s", name);
    printf( "Hey there, %s . How are you? ", name);
    scanf("%s", mood);
    printf("Oh, you are %s?. Enter 1 or 0: ", mood);
    scanf("%i", confirm);
    if (confirm == 1) {
        printf("Oh good!");
    }
    else {
        printf("Make up your mind");
    }
    getchar();
    return(0);

}

何らかの理由でそれを機能させることができません.Xcodeが非常に多くの理由で私にうめき声を上げないようにするために、いくつかのことを変更する必要がありました. それは私に与えています

warning: Comparison between pointer and integer int* and int

実行すると、1 を入力しても、決心するように指示されます。

次回はもっとよくわかるように、どんな助けも素晴らしいでしょう。それはおそらく本当に単純なことです。

4

3 に答える 3

4

の答えを保持するために配列を作成する必要はありません。confirm法線intで行います。

int confirm;

しかしscanf、ポインタが期待されるように、そのアドレスを次のように渡す必要があります。

scanf("%d", &confirm);

最後に、これは -scanf("%i", confirm);実際にはこれのはずです - scanf("%d", &confirm);

%d整数変数の標準フォーマット文字です。

その後、すべてが正常にコンパイルされました。

C は常に値渡しであるため、scanf提供された変数に入力した値を格納する方法はありません。ただし、値が存在するメモリ内に到達してメモリに直接書き込む場合を除きます。

そのため、変数自体ではなく、変数のメモリ アドレスを要求します (先頭に追加することで、何かのアドレスを提供します&)。

配列は、引数として関数に渡されると、すでにアドレス (より正確にはポインターであり、ポインターは何かのアドレスを格納します) として扱われます。

ポインターと配列に関する情報はこちら

于 2013-06-28T03:03:33.397 に答える