【发布时间】:2015-08-25 10:49:13
【问题描述】:
我不明白为什么下面的代码不起作用:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
struct data
{
int age;
char name[20];
};
int main()
{
struct data element[2];
for (int j = 0; j < 2; j++)
{
element[j] = (struct data) malloc(sizeof(struct data));
printf("Enter fav number%d? \n", j);
scanf("d", &element[j].age);
printf("Enter fav word? \n");
scanf("s", &element[j].name);
}
printf("\nThis is what you entered:\n");
for (int k = 0; k < 2; k++)
{
printf("%d. Fav number: %d\n", k, &element[k].age);
printf("%d. Fav word: %s\n", k, &element[k].name);
}
return 0;
}
编译器错误提示:
beispiele.c: In function ‘main’:
beispiele.c:199:51: error: conversion to non-scalar type requested
element[j] = (struct data) malloc(sizeof(struct data));
^
beispiele.c:201:3: error: too many arguments for format [-Werror=format-extra-args]
scanf("d", &element[j].age);
^
beispiele.c:203:3: error: too many arguments for format [-Werror=format-extra-args]
scanf("s", &element[j].name);
^
beispiele.c:208:3: error: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘int *’ [-Werror=format=]
printf("%d. Fav number: %d\n", k, &element[k].age);
^
beispiele.c:209:3: error: format ‘%s’ expects argument of type ‘char *’, but argument 3 has type ‘char (*)[20]’ [-Werror=format=]
printf("%d. Fav word: %s\n", k, &element[k].name);
^
cc1: all warnings being treated as errors
【问题讨论】:
-
scanf使用%d和%s分别读取整数和字符串。此外,您不必将&string_variable作为参数传递。你必须通过string_variable因为它本身就是一个指针 -
element[i]是一种自动存储结构,因此它已经分配了内存。从代码来看,这里不要malloc,只需要已经存在的两个元素。 -
请激活警告,它会告诉您“printf”和
scanf参数中的哪一个与格式说明符不匹配。 -
@MOehm 警告实际上是按照“cc1:所有警告都被视为错误”来激活的
-
@CoolGuy:是的,警告就在那里。抱歉,仅从代码判断。