我正在学习如何用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,它也会让我下定决心。
任何帮助都会很棒,所以下次我知道的更好。这可能非常简单。
答案 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);
它应该可以正常工作