C代码无法正常工作

时间:2013-06-28 02:57:05

标签: c int

我正在学习如何用C语言编写代码,这是我的第一个非网络语言,并没有一个良好的开端。

我有以下代码:

//
//  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,它也会让我下定决心。

任何帮助都会很棒,所以下次我知道的更好。这可能非常简单。

3 个答案:

答案 0 :(得分:4)

无需创建数组来保存confirm的答案,正常int会这样做:

int confirm;

但由于scanf需要一个指针,你需要传递它的地址,如下所示:

scanf("%d", &confirm);

最后,这个 - scanf("%i", confirm);实际应该是这个 - scanf("%d", &confirm);

%d是整数变量的标准格式字符。

之后,一切都编好了。

C总是按值传递,因此scanf无法存储您在提供的变量中输入的值,除非它到达内存所在的内存并直接写入内存。

这就是为什么它要求变量的内存地址,而不是变量本身(你通过将&添加到它来提供某些东西的地址)。

当作为参数传递给函数时,数组已经被视为地址(指针更精确,指针存储某些东西的地址),这就是为什么你不为它们做这些。

有关指针和数组的一些信息here

答案 1 :(得分:3)

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

if (confirm[0] == 1)

甚至更容易

int confirm;
scanf("%d", &confirm);
if (confirm == 1)

答案 2 :(得分:2)

对整数使用%d(确认)

确认声明为数组,但您只需要一个普通整数。在声明中confirm之后删除[100]。它应该是;

int confirm;

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

每当声明一个数组时,该数组的基地址都可以在数组名中找到。(例如confirm这里)

scanf替换为confirm

scanf("%d",&confirm);

它应该可以正常工作

相关问题