前提・実現したいこと
質問の順番をランダムに表示するrandom_number関数を教えていただきたいです。
ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define N 256
typedef struct _Question{
int qid;
char qstr[256];
char qtype[256];
int answer;
} Question;
bool read_questions(char* path, Question* qp)
{
FILE* fp;
fp = fopen(path, "r");
if (fp == NULL){
printf("ファイルオープンに失敗しました.\n");
return false;
}
char line[256];
char q[256];
char type[256];
int no;
int i = 0; while( fgets(line, N, fp) != NULL) { sscanf(line, "%d,%[^,],%s", &no, q, type); qp[i].qid = no; strcpy(qp[i].qstr, q); strcpy(qp[i].qtype, type); i+=1; } fclose(fp); return true;
}
void random_number(int* ary)
{
// ここに,質問順序をランダムに決める処理を記述する
}
int print_option(int qid)
{
if (qid != 7 && qid != 9){
printf("\t1: きわめて当てはまらない\n");
printf("\t2: やや当てはまらない\n");
printf("\t3: どちらでもない\n");
printf("\t4: やや当てはまる\n");
printf("\t5: きわめて当てはまる\n");
}
else if (qid == 7 || qid == 9)
{
printf("\t1: きわめて当てはまる\n");
printf("\t2: やや当てはまる\n");
printf("\t3: どちらでもない\n");
printf("\t4: やや当てはまらない\n");
printf("\t5: きわめて当てはまらない\n");
}
int ok = 0;
int input = 0;
printf("当てはまる番号(半角数字)を回答してください: ");
scanf("%d", &input);
while(ok != 1)
{
if ( input >= 1 && input <= 5){
ok = 1;
break;
}
else{
printf("1~5の整数で入力してください.\n");
input = 0;
scanf("%*c%d", &input);
}
}
return input;
}
void disp_question(Question* qp)
{
int ary[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
// ランダムに出題する
random_number(ary);
for(int i = 0; i < 12; i++){
printf("----------------------------\n");
printf("「%s」\n", qp[ary[i]].qstr);
int input = print_option(qp[ary[i]].qid);
qp[ary[i]].answer = input;
printf("\n");
}
}
// 回答結果に基づいて各指標のスコア計算を行う
void calc_score(Question* qp, int* scores)
{
for (int i = 0; i <12; i++)
{
if (qp[i].qid == 1 || qp[i].qid == 6 ){
scores[0] += qp[i].answer;
}
else if (qp[i].qid == 5 || qp[i].qid == 10){
scores[1] += qp[i].answer;
}
else if (qp[i].qid == 4 || qp[i].qid == 9){
scores[2] += qp[i].answer;
}
else if (qp[i].qid == 2 || qp[i].qid == 7 || qp[i].qid == 12){
scores[3] += qp[i].answer;
}else{
scores[4] += qp[i].answer;
}
}
}
// メイン関数
void main(void)
{
// ランダム関数のシードの設定
srand((unsigned) time(NULL));
// 12questions.txt を読み込んで配列に格納する Question qp[12]; read_questions("12questions.txt", qp); // 読み込んだ質問を1問ずつ提示し, // 回答させる.回答した番号を配列に格納する disp_question(qp); // 配列に格納した番号をもとに,5指標に対するスコアを計算する int scores[5]; calc_score(qp, scores); // 計算したスコアを可視化(+マークの数で表示) puts("____NPA性格診断結果____"); char* ptypes[5] = {"外向性", "神経質傾向", "誠実性", "調和性", "経験への開放性" }; for (int i = 0; i< 5; i++) { printf("%-15s\t", ptypes[i]); for (int j=0; j<scores[i]; j++){ printf("+"); } printf("\n"); }
}%
ソースコード
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー