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

typedef struct{
int a;
char name[100];
int b;
int c;
}stringx;

int main(void)
{
int i;
stringx str[5];

for(i = 0;i < 5;i++){
printf("a:");scanf("%d", str[i].a);
printf("name:");fgets(str[i].name, 100, stdin);
printf("b:");scanf("%d", str[i].b);
以下略

これでnameのところに空白も読み込める文字列を入力したいんですが

(実行例)
a:1
name:b:2

と、何故かnameの入力自体がスルーされてしまいます
ちなみにscanfに終了判定を付けたものやgetsでも同じようにスルーされます
何処がいけないのでしょう
コンパイラはgccです