小弟最近在弄一个背单词的程序,程序现在有了,有些想改动的地方,想把测试单词的部分改成以ABCD4个选项出现的形式,然后选择正确的答案,请问怎么改动,原来是出现中文然后输入英文.希望大
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/16 14:29:30
小弟最近在弄一个背单词的程序,程序现在有了,有些想改动的地方,想把测试单词的部分改成以ABCD4个选项出现的形式,然后选择正确的答案,请问怎么改动,原来是出现中文然后输入英文.希望大
小弟最近在弄一个背单词的程序,程序现在有了,有些想改动的地方,想把测试单词的部分改成以ABCD4个选项出现的形式,然后选择正确的答案,请问怎么改动,原来是出现中文然后输入英文.希望大神能附上代码,感激不尽
小弟最近在弄一个背单词的程序,程序现在有了,有些想改动的地方,想把测试单词的部分改成以ABCD4个选项出现的形式,然后选择正确的答案,请问怎么改动,原来是出现中文然后输入英文.希望大
我大概能理解你的意思,但是不太清楚具体的要求,是不是像下面这个样子?
1.请问hello的意思是?A.喂,用于打招呼
B.错误答案B
C.错误答案C
D.错误答案D
如果是这样的话,你可以定义一个结构体,存储题目的相关信息:
typedef struct
{
char answer; // 正确答案
const char *answerA; // 答案A
const char *answerB; // 答案B
const char *answerC; // 答案C
const char *answerD; // 答案D
}QuestionInfor;
这么定义我觉得不是很好的,因为你不能把信息存储到文件当中,如果要不信息存储到文件中,你可以自己写一个解析器:
【我简单的写了下面的代码,你看看对你有没有帮助吧,我测试过,可以使用】
#include <stdio.h>
#include <ctype.h>
// 返回值
#define ERR_END_OF_FILE -1 // 文件到达尾部
#define ERR_FILE_OP -2 // 文件相关操作出错
#define ERR_INVALID_ARG -3 // 非法参数
/*! \brief 从文件中读出一行,行号为'\n'
\param fp 文件描述符
\param buffer 缓存
\param len 缓存长度
\return 假如读取成功,返回值大于0,否则,返回 ERR_END_OF_FILE/ERR_FILE_OP/ERR_INVALID_ARG
*/
static int myGetLine(FILE *fp,char *buffer,int len)
{
int i,offset;
size_t mBytes;
if (len <= 0) {
printf("非法参数!\n");
return ERR_INVALID_ARG;
}
if (feof(fp)) {
return ERR_END_OF_FILE;
}
mBytes = fread(buffer,1,len,fp);
if (mBytes < 0) {
printf("读取文件错误!\n");
return -ERR_FILE_OP;
} else if ( mBytes == 0) {
return ERR_END_OF_FILE;
}
offset = 0 ;
for (i = 0;i < mBytes;i++) {
if (buffer[i] == '\n') {
buffer[i] = 0 ;
offset = mBytes - i - 1;
break ;
}
}
buffer[len - 1] = 0 ;
if (fseek(fp,-offset,SEEK_CUR) != 0 ) {
printf("文件操作错误!\n");
return ERR_FILE_OP;
}
return i + 1;
}
// 从文件中读取一个问题
static char getOneQuestion(FILE * fp)
{
// 缓存大小
char cpBuffer[1024];
// 答案
char cAnswer;
int i,ret;
cAnswer = ERR_END_OF_FILE;
// 提取一个问题相关信息
while ( 1 ) {
ret = myGetLine(fp,cpBuffer,1024);
if (ret < 0 ) {
return ret;
}
if (strcmp(cpBuffer,"<Question>") != 0) {
continue ;
}
break ;
}
// 获取单词
if ((ret = myGetLine(fp,cpBuffer,1024)) < 0) {
return ret;
}
printf("%s 是什么意思?\n",cpBuffer);
// 获得答案
if ((ret = myGetLine(fp,cpBuffer,1024)) < 0) {
return ret;
}
for (i = 0;i < 1024;i++) {
if (isalpha(cpBuffer[i])) {
cAnswer = cpBuffer[i] ;
break ;
}
}
// 获取选项
while ((ret = myGetLine(fp,cpBuffer,1024)) > 0) {
if (strcmp(cpBuffer,"</Question>") == 0) {
break ;
}
printf("%s \n",cpBuffer);
}
return cAnswer;
}
// main 函数
int main()
{
FILE *fp;
char cAnswer,cInput;
fp = fopen("words.inf","r");
if (fp == NULL) {
printf("Open file error\n");
// 错误处理代码
return -1;
}
while (1) {
putchar(10);
cAnswer = getOneQuestion(fp);
if (cAnswer == -1) {
printf("测试结束\n");
break ;
} else if (cAnswer < 0) {
printf("读取题目错误\n");
break;
}
printf("\n请输入答案 : \n");
cInput = getchar();
if (cInput == 'q' || cInput == 'Q') {
break;
}
if ( toupper( cInput ) == toupper(cAnswer)) {
printf("回答正确\n");
} else {
printf("回答错误,正确答案是 %c \n",cAnswer);
}
getchar();
getchar();
}
fclose(fp);
return 0;
}