#include<stdio.h>
#include<stdlib.h>
typedef struct{
int number;
int value;
int suit;
} CardT;
CardT initCard(CardT, int);
int compareCard(CardT, CardT);
void displayCard(CardT);
int main(void){
CardT cardB;
printf("hey man\n");
initCard(cardB, 32);
printf("%i\n", &cardB.number);
printf("%i\n", &cardB.value);
printf("%i\n", &cardB.suit);
return(0);
}
CardT initCard(CardT Card, int x){
Card.number = x;
if (x%13 == 8){ Card.value = 'T';}
else if (x%13 == 9){ Card.value = 'J';}
else if (x%13 == 10){ Card.value = 'Q';}
else if (x%13 == 11){ Card.value = "K";}
else if (x%13 == 12){ Card.value = "A";}
else {Card.value = x%13;}
Card.suit = x/4;
return Card;
}
所以事情编译,但输出是数字的内存位置。我无法弄清楚如何在没有错误的情况下输出实际数字。有线索吗?
答案 0 :(得分:2)
你的指针似乎很困惑。当您在CardT
中声明main()
时,这不是指针......因此您无需取消引用printf()
中的任何内容(如果这是您要尝试的内容) ......如果是这样的话,无论如何都不是正确的方法)。而不是:
printf("%i\n", &cardB.number);
你只需要:
printf("%i\n", cardB.number);
......但这不是唯一的问题。如果你这样做(对于所有三个),你将打印结构成员的值而不是地址,但是由于另一个问题它们将被取消初始化 - 你的initCard()
函数正在运行<你传递它的结构的em> copy (通过值传递)并且不在main()
中修改结构的内容。您需要将指针传递给它,并在内部使用->
运算符而不是.
(通过指针而不是直接取消引用和访问结构成员)。所以:
CardT initCard(CardT Card, int x){
变为:
CardT initCard(CardT *Card, int x){
...函数内部的行改为例如:
Card.number = x;
...为:
Card->number = x;
答案 1 :(得分:1)
问题在于您使用printf函数的方式。您将参数作为参数传递,而不是实际变量(在变量表示其地址之前)。这是scanf所必需的,因为它必须将数据放在内存位置,但不能放在printf中。所以,你的陈述应该是:
printf("%i\n", cardB.number);
printf("%i\n", cardB.value);
printf("%i\n", cardB.suit);
答案 2 :(得分:0)
与scanf()
(由于__赋值)需要每个变量的地址不同,printf()
需要按值传递变量。你通过地址传递它们是造成这个问题的原因。