gpt4 book ai didi

c - 定义变量与初始化

转载 作者:行者123 更新时间:2023-11-30 15:23:53 27 4
gpt4 key购买 nike

因此,我的教授让我相信,在声明数组的大小时,最好使用 #define 而不是仅将其声明为普通整数。这是正确的吗?

如果是这样,为什么?

另外,如果这是正确的,我做错了什么?当我尝试这样做时,我收到一条消息:

error: expected ';', ',' or ')' before numeric constant

每次我调用数组时。如果我只是将其初始化为整数,该代码就可以工作。

定义和使用可以看下面的代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define handsize 5
#define size 52

// Create function prototypes
void create_deck (int deck[]);
void shuffle_deck (int size, int deck[]);
void display_card (int card);
void display_hand (int size, int hand[]);
int popCard (int *size, int deck[]);
int findScore (int size, int hand[]);

int main()
{
// declare/ initialize variables
int c, d, p, win = 0, lose = 0 , tie = 0, /*handsize = 0, size = 52,*/ deck[size], hand[handsize], dealer[handsize];
char play;
srand(time(NULL)); // attach random number generator to time function for truly random variables

// explain program to user and ask if they want to play
printf("This program is a card game that adds the values of all the\n");
printf("cards in the players hand, and the computers hand. The highest hand wins.\n");
printf("Would you like to play? Please press 'y' for yes, any other key for no.\n");
scanf("%c", &play); // if the user wants to play, continue the program

// while loop that continues as long as the user wants to play
while (play == 'y'){

// call functions to create and shuffle the deck
create_deck(deck);
shuffle_deck (size, deck);

// for loop that calls the popCard function to deal the top card in the deck
for (c = 0; c < 5; c++){
hand[c] = popCard (&size, deck); // player gets a card
dealer[c] = popCard (&size, deck); // computer gets a card
handsize++;
// call the display_hand function to display the individual cards in the players hand
printf("\nYour hand consists of:\n");
display_hand (handsize, hand);
// call the display_hand function to display the individual cards in the dealers hand
printf("Dealer hand consists of:\n");
display_hand (handsize, dealer);
}

// call the findScore function for both the user and the computer
p = findScore (handsize, hand);
d = findScore (handsize, dealer);

// show the value of the user and computers hands
printf("\nThe value of your hand is %i\n", p);
printf("\nThe value of the dealers hand is %i\n", d);

// if statements that keep track of wins, losses and ties
if (p > d)
win++;
if (p == d)
tie++;
if (p < d)
lose++;

// show number of times player has won, lost, tied. Then ask to play again
printf("You have won %i times, tied %i times, and lost %i times\n", win, tie, lose);
printf("\nWould you like to play again?\n");
fflush(stdin); // flush the input buffer to stop false readings
scanf("%c", &play); // read the user input to determine if they want to play again
}
printf("Goodbye");
return 0;

**我希望这是你想要的

最佳答案

通常首选符号常量(#define 或实际常量)。

例如,当您的代码中充满了值1440,但您使用该数字表示每英寸缇数和每软盘千字节数(在这里非常暴露我的年龄)时,会发生什么情况? p>

然后你的软盘突然变成了 2.88M。然后,您必须检查所有代码,查找1440,并确定它是否意味着缇或千字节版本,并更改​​相关版本。因此,您不仅必须在多个地方进行更改(这已经够糟糕了),您可能还必须弄清楚是否要在每个地方进行更改。

如果你这样做:

#define TWIPS_PER_INCH 1440
#define KB_PER_FLOPPY 1440

然后在代码中添加符号名称,您就可以只更改一行行,而无需太多思考或分析。

<小时/>

有一个学派认为,除了零或一(也可能是负数)之外的任何数字都应该有某种符号常数。只要确保您没有犯以下错误即可:

#define FOURTEEN_HUNDRED_AND_FORTY 1440

就像我的一个手下曾经尝试过的那样。我在试图解释为什么是一个坏主意时获得了无尽的乐趣:-)

<小时/>

至于您的错误,当然可以声明一个带有预处理器常量的数组,如下所示:

#include <stdio.h>
#include <string.h>

#define VAR 42
int main (void) {
char xyzzy[VAR];
strcpy (xyzzy, "pax is awesome");
puts (xyzzy);
return 0;
}

但是,请考虑代码中的以下几行:

#define size 52
void shuffle_deck (int size, int deck[]);
void display_hand (int size, int hand[]);
int popCard (int *size, int deck[]);
int findScore (int size, int hand[]);
hand[c] = popCard (&size, deck);
// and possibly many others.

因为预处理是在编译过程早期完成的文本替换,所以第一行后面的那些行将变成:

void shuffle_deck (int 52, int deck[]);
void display_hand (int 52, int hand[]);
int popCard (int *52, int deck[]);
int findScore (int 52, int hand[]);
hand[c] = popCard (&52, deck);

它们会导致各种各样的问题,其中52在函数原型(prototype)中不是一个有效的变量名,并且你不能在C中获取整数文字的地址,因为它< em>没有地址。

为了解决这个问题,您将初始大小定义为常量:

#define INIT_SZ 52

并使用它来设置变量 大小的初始值,您可以稍后更改该值,例如:

void doSomethingThatChangesSize (int *pSize) {
(*pSize) += 42;
}

int size = INIT_SZ; // this is the only way you use INIT_SZ
:
doSomethingThatChanges (&size);

关于c - 定义变量与初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28621395/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com