【发布时间】:2018-05-09 19:06:34
【问题描述】:
在下面的程序中,我正在输入数据表单文件,
文件包含:第一行:答案键,后续行包含学生 ID 和他们的答案。
在程序中,我比较答案键和学生响应键并计算成绩和分数。
在读取 id 后,我需要丢弃 id 后面的空格,因为我需要读取一个字符,但是在使用 char 变量从文件中读取一个字符时,它正在读取空间,但也吃掉了下一个字符,所以我离开了学生答案键长度为 9 个字符,但应为 10 个字符。
int main() 中包含显示功能的 while 循环应该只运行一次,因为我在文件中只有一条记录,但它运行了 2 次。
这有什么问题?
#include<iostream>
#include<string>
#include<fstream>
#include<iomanip>
using namespace std;
class student{
string ans,usn;
int marks,tot;
char grade;
public:
void input(string key,fstream &fp){
char ch;
marks=tot=0;
grade='z';
fp>>usn>>ch;
getline(fp,ans);
string::iterator it1,it2;
for(it1=key.begin(),it2=ans.begin()+1;it1!=key.end();++it1,++it2){
tot+=2;
if(*it1==*it2)
marks+=2;
else if(*it1!=*it2&&*it2!=' ');
//marks-=1;
}
grade=marks<0?'z':(75-(marks*10/tot));
}
void display(){
cout<<left<<setw(20)<<usn<<setw(20)<<ans<<setw(10)<<marks<<setw(10)<<grade<<ans.length()<<" "<<tot<<endl;
}
};
int main(){
student s;
string key;
char ch;
fstream fp("file.txt");
if(!fp){
cout<<"\nError in opening file"<<endl;
exit(0);
}
getline(fp,key);
cout<<left<<"key:"<<key<<endl<<setw(20)<<"usn"<<setw(20)<<"Answer key"<<setw(10)<<"marks"<<setw(10)<<"grade"<<endl<<setfill('-')<<setw(60)<<"-"<<setfill(' ')<<endl;
while(!fp.eof()){
s.input(key,fp);
s.display();
}
fp.close();
return 0;
}
文件:
TTTTTTTTTT
1rv16is089 FTTTTTTTTT
输出:
key:TTTTTTTTTT
usn Answer key marks grade
------------------------------------------------------------
1rv16is089 TTTTTTTTT 16 C 9 20
1rv16is089 TTTTTTTTT 16 C 9 20
【问题讨论】:
-
我想是时候你了learn how to debug your programs。
-
对不起,但是什么都试过了,可是为什么
char会吃掉2个字符呢? -
char 不吃 2 个字符!
-
@Rahul 你说你不能调试是什么意思?调试是每个人都在他们的代码中发现错误的行为。如果您不知道如何 - 建议您学习它,这是任何开发人员的基本技能。