【问题标题】:C++ Segfault No compile errors can't find causeC++ Segfault 没有编译错误 找不到原因
【发布时间】:2013-09-19 00:34:28
【问题描述】:

希望有人可以提供帮助。我能够毫无错误地编译,我没有发现任何语法错误,但是当我运行它时,它崩溃了。在启动时调试段错误。充分披露,这是功课。我不是要找人来编写这个代码,只是看看我的问题和我现有的代码,也许可以指出我做了什么让这件事变得如此糟糕?

问题:您找到了一份为期五周的令人兴奋的暑期工作。例如,它每小时支付 15.50 美元。假设您为暑期工作收入支付的总税款为 14%。缴纳税款后,您将净收入的 10% 用于购买下一学年的新衣服和其他配饰,1% 用于购买学习用品。买衣服和学习用品后,你用剩余的 25% 购买储蓄债券。对于您购买储蓄债券的每一美元,您的父母会花费 0.50 美元为您购买额外的储蓄债券。编写一个程序,提示用户输入一个小时的工资率和您每周工作的小时数。然后程序输出以下内容: 一种。您的暑期工作税前和税后收入。 湾。你花在衣服和其他配饰上的钱。 C。你花在学习用品上的钱。 d。你用来购买储蓄债券的钱。 e.您父母为您购买额外储蓄债券所花费的钱。

代码:

// Libraries defined 
#include <iomanip>  
#include <iostream> 

using namespace std; 

//Main function 
int main () 

{ 

//Input variables 
    double hourlyrate; 
    double hweek1; 
    double hweek2; 
    double hweek3; 
    double hweek4; 
    double hweek5; 

//Output variables 
    double beforetax; 
    double netincome; 
    double clothmoney; 
    double suppliesmoney; 
    double moneyonbonds; 
    double additionalbonds; 
    double remain; 

//This statement takes care of the decimal places 
    cout << fixed << showpoint << setprecision(2);  

//Input from user 
    cout << "Enter your hourly rate: " << hourlyrate; 
    cin >> hourlyrate; 
    cout << "Week 1: " << hweek1; 
    cin >> hweek1; 
    cout << "Week 2: " << hweek2; 
    cin >> hweek2; 
    cout << "Week 3: " << hweek3; 
    cin >> hweek3; 
    cout << "Week 4: " << hweek4; 
    cin >> hweek4; 
    cout << "Week 5: " << hweek5; 
    cin >> hweek5; 

//Mathematics 
    beforetax = hourlyrate * (hweek1 + hweek2 + hweek3 + hweek4+ 
    hweek5) ; 
    netincome = beforetax - beforetax * 0.14; 
    clothmoney = netincome * 0.1; 
    suppliesmoney = netincome * 0.01; 
    remain = netincome - clothmoney - suppliesmoney; 
    moneyonbonds = remain * 0.25; 
    additionalbonds = static_cast<double>(moneyonbonds) * .50; 

//Output to user 
    cout << endl << "Income before tax = $" << beforetax << endl 
    << "Net income = $" << netincome << endl << "Money for clothes/accesories = $"
    << clothmoney << endl << "Money for supplies = $"<< suppliesmoney << endl 
    << "Money for saving bonds = $" << moneyonbonds << endl 
    << "Additional saving bonds money = $" << additionalbonds; 


return 0; 
}

【问题讨论】:

  • 你试过调试器吗?
  • 当它崩溃时,你会得到堆栈跟踪吗?
  • 为什么在初始化或输入值之前打印小时费率?看起来很奇怪。 (与每小时费率同上)。不要忘记在最后输出一个换行符(或使用endl)。而且,鉴于moneyonbonds 被定义为double,您认为static_cast&lt;double&gt;(moneyonbonds) 在做什么(除了弄乱程序)?它是没有解决问题的实验遗留物吗?
  • 我看不出这个程序有任何可能的段错误。你确定这是怎么回事吗?
  • 你如何编译和链接你的代码?

标签: c++


【解决方案1】:

我收到了这个错误

cout &lt;&lt; "Enter your hourly rate: " &lt;&lt; hourlyrate;

您尝试在初始化之前输出变量。 这可能是无意的。

下一行是

cin &gt;&gt; hourlyrate

每个变量都是一样的。您应该初始化它们或不输出它们。

【讨论】:

  • 这不是答案。
  • 我认为是。这就是为什么它对我来说失败了。
  • 问题是关于段错误。当您尝试使用未初始化的值时,代码是否出现了段错误?
  • 可能我们都在用visual studio,你们喜欢g++什么的
  • 这是有道理的。此外,我认为您可以直接将图像添加到您的答案中,而无需包含指向图像托管站点的链接。
【解决方案2】:

你确定吗:

cout << "Enter your hourly rate: " << hourlyrate; 
cin >> hourlyrate; 
cout << "Week 1: " << hweek1; 
cin >> hweek1; 
cout << "Week 2: " << hweek2; 
cin >> hweek2; 
cout << "Week 3: " << hweek3; 
cin >> hweek3; 
cout << "Week 4: " << hweek4; 
cin >> hweek4; 
cout << "Week 5: " << hweek5; 
cin >> hweek5;

我认为你想要:

cout << "Enter your hourly rate: "; 
cin >> hourlyrate; 

代替:

cout << "Enter your hourly rate: "<< hourlyrate; 
cin >> hourlyrate; 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 2020-09-24
    相关资源
    最近更新 更多