C语言中一个奇怪的小疑点-求解

C语言中一个奇怪的小问题------求解
前些天一个小弟让我给他弄个C语言的东东,要求如下:
0 欢迎!本程序用于测试题得分统计,最多支持1000题,每题最多10个选项
1 由用户输入题目数,选项数,每个选项的分数(每个选项都有相应的分数)
2 选项分为字母选项或数字选项
3 支持将选项分为多个类别,并打印出每个类别分数的总和
样例输入和输出:
选项为字母(1)或数字(2):1 
请输入题目数:10
请输入选项数:4
请输入选项:A B C D
请依次输入每个选项的得分:1 2 3 4
请输入选择:A B C D A B C D A B
要将题目分为几个类别:2
请输入类别1的选项数和选项:5 1 2 3 4 5
请输入类别2的选项数和选项:5 2 4 6 8 10
类别1得分:11
类别2得分:12
写倒是很快写好了,但是有点小问题,那个选项第二个的标号或者分数总出问题(只有第二个),
试了几个方法,注释掉的都试过了,代码如下,各位给看看,求解,很谢谢。。。

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

int main()
{
int exerciseCount = 0, optionCount = 0, typeCount = 0, optionType = 0, 
groupCount = 0, groupOptionCount = 0, groupScoreSum= 0;
void* options = NULL;
void* chooses = NULL; 
// int* optionScores = NULL;
int* groupChooses = NULL;
int* groupScores = NULL;  
printf("\
**************************************\n \
*                欢迎!              *\n \
*      本程序用于测试题得分统计,    *\n \
*  最多支持1000题,每题最多10个选项  *\n \
**************************************\n");

printf("选项为字母(1)或数字(2),请选择类型:");
scanf("%d", &optionType);
switch(optionType)
{
case 1:    printf("选项为字母!\n");    break;
case 2:    printf("选项为数字!\n");    break;
default:   printf("非法选项!\n");      exit(0);
}

printf("请输入题目数:");
scanf("%d", &exerciseCount);

printf("请输入每题的选项数:");
scanf("%d", &optionCount);

// 存储选项标号数组
if(optionType == 1)
{
     printf("请依次输入选项标号(请注意标号为字母):");
options = (char *) malloc(sizeof(char)*optionCount);
for(int i=0; i<optionCount; ++i)
{
scanf(" %c", (char *)options + sizeof(char)*i);
}
}
else if(optionType == 2)
{
     printf("请依次输入选项标号(请注意标号为数字):");
  options = (int *) malloc(sizeof(int)*optionCount);  
for(int i=0; i<optionCount; ++i)
{
scanf("%d", (int *)options + sizeof(int)*i);