你好,我对整数有疑问。这是我的代码:
#include <stdio.h>
#include <stdlib.h>
struct data
{
char name[50];
int grade[1];
};
int main()
{
struct data persons[30];
int n = 3;
int i;
for(i=0;i<n;i++)
{
printf("Type person name nr: [%d] ",i+1);
scanf("%s",persons[i].name);
printf("Type grade: (from 1 to 6) ");
scanf("%d",persons[i].grade);
}
for(i=0;i<n;i++)
{
printf("Name [%d]: %s\n",i+1,persons[i].name);
printf("Grade [%d]: %d\n",i+1,persons[i].grade);
}
return 0;
}
当我输入一些名称和等级时,输出不正确: This is my output
答案 0 :(得分:3)
标准int够用时,您正在为一个年级使用数组。
_raw_spin_unlock_irqstore
然后您还需要使用&将int的引用传递给scanf。
struct data
{
char name[50];
int grade;
};
答案 1 :(得分:3)
程序的更正版本:
#include <stdio.h>
#include <stdlib.h>
struct data {
char name[50];
int grade; // In you case, to store one integer value just use int varibale because it seems more logical.
};
int main() {
struct data persons[30];
int n = 3;
int i;
for (i = 0; i < n; i++) {
printf("Type person name nr: [%d] ", i + 1);
scanf("%s", persons[i].name);
printf("Type grade: (from 1 to 6) ");
scanf("%d", &persons[i].grade); // To fill member of structure you may use '&' sign because scanf gets address.
}
for (i = 0; i < n; i++) {
printf("Name [%d]: %s\n", i + 1, persons[i].name);
printf("Grade [%d]: %d\n", i + 1, persons[i].grade);
}
return 0;
}
此外,请记住,编译器并不总是告诉您某些地方出了问题,在大多数情况下,对编译器使用特殊标志(我在评论中提到了其中的一些标志)可以为您提供更多信息。
值得注意的是,当前的IDE突出显示了明显的错误,并确实加快了开发过程。
答案 2 :(得分:0)
您必须替换
web.config
作者
printf("Grade [%d]: %d\n",i+1,persons[i].grade);
在scanf中执行printf("Grade [%d]: %d\n",i+1,persons[i].grade[0]);
,因此,由于 grade 是向量,因此需要提供其地址,但是在 printf 中,您必须指定索引,否则打印向量的地址
但是使用向量是没有用的,因为它仅包含一个元素,最好直接使用 int 进行评分,当然在这种情况下,您必须给scanf("%d",persons[i].grade);
scanf 和&persons[i].grade
printf
执行:
persons[i].grade
答案 3 :(得分:0)
这是因为grade
是一个数组,因此在向其中写入数据或从中读取数据时,您需要执行.grade[0]
,例如:
scanf("%d",persons[i].grade[0]);
...
printf("Grade [%d]: %d\n",i+1,persons[i].grade[0]);