このプログラムを完璧に・・・
Posted: 2013年7月21日(日) 20:09
課題で「ラーニングソフト」を作っているのですがこのプログラムにワードから持ってきたテキストデータを読み込んで正誤をさせるものを作りたいのですが改善点があれば教えていただきたいです。
こちらがそのプログラムになります↓
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
FILE *fp; /* (1)ファイルポインタの宣言 */
char s[16][512];//16個の512(¥0含む)の長さの文字列を収納できる配列
/* (2)ファイルのオープン */
/* ここで、ファイルポインタを取得する */
if ((fp = fopen("smpl.txt", "r")) == NULL) {//読み取り用にファイルを開く
printf("file open error!!\n");
exit(EXIT_FAILURE); /* (3)エラーの場合は通常、異常終了する */
}
int i = 0;
/* (4)ファイルの読み(書き)*/ //fgets()一行ずつ文字列を読み込み配列に収納 ¥n(改行)含む
while (fgets(s, 512, fp) != NULL && i < 15) {
/* ここではfgets()により1行単位で読み出し */
int mojisuu = strlen( s );//読み取った文字列が何文字あるか
s[mojisuu-1] = '\0';//最後の文字が¥nになっているため¥0を¥の位置に挿入
/*デバッグ用**************************************/
/*mojisuu = strlen( s );
/*printf("<%d>\n",mojisuu); デバッグ用 ループが回っているか確認
printf("<%s>\n",s);*/
/**********************************************/
i++;//sの次の文字列保存場所にインデックスを移動
}
int mondaisuu = 0;//何問目か記録
char kaitou[512];//回答を保存する文字列 問題の旅に上書き
while(mondaisuu < 15){//問題数の分ループ
printf("%d問目文字列を入力してください\n",mondaisuu+1);
scanf("%s",kaitou);
if(!strcmp(s[mondaisuu],kaitou)){//int strcmp(char[] a,char b[])文字列a bが一致していれば0を返す 0の時実行したいので ! で反転
printf("正解\n\n");
mondaisuu++;
continue;//ループの最初に戻る
}
printf("不正解\n\n");//正解したら戻るため、実行されない
}
for(/*Cはforないで変数初期化できへんかった*/int j = 0;j < 16;j++){//読み取り保存した文字列をすべて出力
printf("%s",s[j]);
}
fclose(fp); /* (5)ファイルのクローズ */
scanf("%d",&s[1]);
return 0;
}
こちらがそのプログラムになります↓
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
FILE *fp; /* (1)ファイルポインタの宣言 */
char s[16][512];//16個の512(¥0含む)の長さの文字列を収納できる配列
/* (2)ファイルのオープン */
/* ここで、ファイルポインタを取得する */
if ((fp = fopen("smpl.txt", "r")) == NULL) {//読み取り用にファイルを開く
printf("file open error!!\n");
exit(EXIT_FAILURE); /* (3)エラーの場合は通常、異常終了する */
}
int i = 0;
/* (4)ファイルの読み(書き)*/ //fgets()一行ずつ文字列を読み込み配列に収納 ¥n(改行)含む
while (fgets(s, 512, fp) != NULL && i < 15) {
/* ここではfgets()により1行単位で読み出し */
int mojisuu = strlen( s );//読み取った文字列が何文字あるか
s[mojisuu-1] = '\0';//最後の文字が¥nになっているため¥0を¥の位置に挿入
/*デバッグ用**************************************/
/*mojisuu = strlen( s );
/*printf("<%d>\n",mojisuu); デバッグ用 ループが回っているか確認
printf("<%s>\n",s);*/
/**********************************************/
i++;//sの次の文字列保存場所にインデックスを移動
}
int mondaisuu = 0;//何問目か記録
char kaitou[512];//回答を保存する文字列 問題の旅に上書き
while(mondaisuu < 15){//問題数の分ループ
printf("%d問目文字列を入力してください\n",mondaisuu+1);
scanf("%s",kaitou);
if(!strcmp(s[mondaisuu],kaitou)){//int strcmp(char[] a,char b[])文字列a bが一致していれば0を返す 0の時実行したいので ! で反転
printf("正解\n\n");
mondaisuu++;
continue;//ループの最初に戻る
}
printf("不正解\n\n");//正解したら戻るため、実行されない
}
for(/*Cはforないで変数初期化できへんかった*/int j = 0;j < 16;j++){//読み取り保存した文字列をすべて出力
printf("%s",s[j]);
}
fclose(fp); /* (5)ファイルのクローズ */
scanf("%d",&s[1]);
return 0;
}