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 回答
3

您收到该警告的原因是因为您将 100 个整数的数组与 1 个整数进行比较。正确的代码是这样的

if (confirm[0] == 1)

甚至更容易

int confirm;
scanf("%d", &confirm);
if (confirm == 1)
于 2013-06-28T03:01:56.607 回答
2

用于%d整数(用于确认)

Confirm 被声明为一个数组,但您只需要一个普通整数。删除声明中的 [100] confirm。它应该只是;

int confirm;

您收到的警告是因为confirm它是一个数组,它试图将数组的基址(确认)与整数值(1)进行比较。

每当您声明一个数组时,该数组的基地址在数组名称中可用。(例如,confirm此处)

scanf将需要的行替换confirm

scanf("%d",&confirm);

那么它应该可以正常工作

于 2013-06-28T02:59:38.490 回答