【发布时间】:2015-07-09 06:38:12
【问题描述】:
我已经定义了一个结构
struct subject
{
char name[100];
int year;
};
由于我需要其中的 n 并且我必须使用 malloc 我在我的主要功能中执行了以下操作:
int n, i;
scanf("%d", &n);
struct subject *ptr = malloc(n*sizeof(struct subject));
不幸的是,当我尝试使用此代码输入内容时:
for(i = 0; i < n; i++)
{
gets((ptr + i)->name);
scanf("%d", (ptr + i)->year);
}
我输入名字后它崩溃了。该任务需要使用malloc。
这是整个代码(不幸的是,它是我的母语,所以有点不同)
#include <stdio.h>
#include<stdlib.h>
#ifndef DEBUG
#define DEBUG(...)printf(_VA_ARGS_)
#endif
struct kolegij
{
char naziv[100];
int semestar;
};
int main(){
int brPredmeta, i;
scanf("%d", &brPredmeta);
struct kolegij *ptr = malloc(brPredmeta*sizeof(struct kolegij));
if(ptr == NULL)
{
printf("error\n");
return 0;
}
for(i = 0; i < brPredmeta; i++)
{
//gets(ptr->naziv);
gets((ptr + i)->naziv);
scanf("%d", &(ptr + i)->semestar);
getchar();
}
for(i = 0; i < brPredmeta; i++)
{
printf("%s\n", ptr[i].naziv);
printf("%d\n", ptr[i].semestar);
}
return 0;
}
关于重复问题。我相信这不应该是重复的,因为它与结构和指针有关。我之前遇到过 scanfs 的问题,我没有将其视为解决方案,因此我认为不应将其标记为重复。
【问题讨论】:
-
你的第二个 scanf 需要一个指向你读入的变量的指针。添加一个 &。
-
正在打印第二个名字吗?
-
我在 scanf 中添加了一个 & 但现在它在名字和年份之后停止输入,并打印出以下 RANDOMNUMBER 主题名称主题年份
-
ENTER 键中的换行符在输入缓冲区中。最简单(但很脆弱)的解决方案是添加一个 getchar();在scanf之后。