运行可执行文件啥都不做
Posted
技术标签:
【中文标题】运行可执行文件啥都不做【英文标题】:Running the executable does nothing运行可执行文件什么都不做 【发布时间】:2009-08-26 07:06:23 【问题描述】:我正在编写一个涉及多个文件的示例示例。详细代码如下。
main.cpp
#include <algorithm>
#include <iomanip>
#include <ios>
#include <iostream>
#include <stdexcept>
#include <string>
#include <vector>
#include "grade.h"
#include "Student_Info.h"
using std::cin;
using std::cout;
using std::domain_error;
using std::endl;
using std::max;
using std::setprecision;
using std::sort;
using std::streamsize;
using std::string;
using std::vector;
int main()
vector<Student_Info> students;
Student_Info record;
string::size_type maxlen = 0; //the length of the longest name
//read and store all the student's data
//Invariant: students contains all the student records read so far
//maxlen contains the length of the longest name in students
while(read(cin,record))
//find length of the longest name
maxlen=max(maxlen,record.name.size());
students.push_back(record);
//alphabetize the student records
sort(students.begin(),students.end(),compare);
//write the names and grades
for(vector<Student_Info>::size_type i=0; i!=students.size();++i)
//write the name, padded to the right to maxlen + 1 characters
cout << students[i].name << string(maxlen+1-students[i].name.size(),' ');
//compute and write the grade
try
double final_grade=grade(students[i]);
streamsize prec = cout.precision();
cout << setprecision(3) << final_grade << setprecision(prec);
catch(domain_error e)
cout << e.what();
cout << endl;
return 0;
学生信息。h,cpp
#ifndef GUARD_Student_Info
#define GUARD_Student_Info
#include <iostream>
#include <string>
#include <vector>
using std::iostream;
using std::string;
using std::vector;
struct Student_Info
std::string name;
double midterm,final;
std::vector<double> homework;
;
bool compare(const Student_Info&, const Student_Info&);
std::istream& read(std::istream&, Student_Info&);
std::istream& read_hw(std::istream&, std::vector<double>&);
#endif
#include "Student_Info.h"
using std::istream;
using std::vector;
bool compare(const Student_Info& x, const Student_Info& y)
return x.name < y.name;
istream& read(istream& is, Student_Info& s)
is >> s.name >> s.midterm >> s.final;
read_hw(is,s.homework); //read and store all the students' homework grades
return is;
istream& read_hw(istream& in, vector<double>& hw)
if(in)
//get rid of previous contents
hw.clear();
//read homework grades
double x;
while(in>>x)
hw.push_back(x);
//clear the stream so that the input would work for the next student
in.clear();
return in;
等级。h,cpp
#ifndef GRADE_H
#define GRADE_H
//grade.h
#include <vector>
#include "Student_Info.h"
double grade(double,double,double);
double grade(double,double,const std::vector<double>&);
double grade(const Student_Info&);
#endif
#include <stdexcept>
#include <vector>
#include "median.h"
#include "grade.h"
double grade(const Student_Info& s)
return grade(s.midterm,s.final,s.homework);
double grade(double midterm, double final, const vector<double>& hw)
if(hw.size()==0)
throw domain_error("student has done no homework");
return grade(midterm, final, median(hw));
double grade(double midterm,double final,double homework)
return 0.2*midterm + 0.4*final + 0.4*homework;
中位数。h,cpp
#ifndef MEDIAN_H
#define MEDIAN_H
#include <vector>
#include <stdexcept> //to get the declaration of domain_error
#include <algorithm> //to get the declaration of sortt
using std::domain_error;
using std::sort;
using std::vector;
double median(std::vector<double>);
#endif
#include "median.h"
double median(vector<double> vec)
typedef vector<double>::size_type vec_sz;
vec_sz size=vec.size();
if(size==0)
throw domain_error("median of an empty vector");
sort(vec.begin(),vec.end());
vec_sz mid=size/2;
return size%2==0 ? (vec[mid]+vec[mid-1])/2:vec[mid];
问题是当我在 linux 上使用 g++ 编译它并运行 ./a.out 时没有任何反应。这很奇怪。我已经查看了代码,但找不到任何不妥之处。希望有人能找到故障。
【问题讨论】:
在 gdb 中运行它,看看它在哪里中断。 【参考方案1】:“什么都没有发生”是指它正在等待输入并且不退出吗?
while(read(cin,record))
在我看来确实是这样。通过标准输入传递一些东西。
【讨论】:
【参考方案2】:通过目视检查发现错误通常很困难 - 在我们的案例中,特别是因为我们仍然没有完整的代码(尽管您发布了其中的重要部分)。
您应该学习使用 gdb,GNU 调试器。用g++ -g
编译你的程序,然后运行gdb a.out
。然后,我推荐以下命令:
【讨论】:
命令start
等价于b main
和run
。它似乎没有很好的记录,但它就在那里。【参考方案3】:
您是否提供输入?该程序期望从标准输入中读取一系列 Student_Info 记录。如果你有一个包含学生记录的文件,你需要有一个类似的命令行:
./a.out < student_records.txt
【讨论】:
以上是关于运行可执行文件啥都不做的主要内容,如果未能解决你的问题,请参考以下文章
iOS:CloudKit perform(query:) 啥都不做 - 没有执行闭包