程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> visual studio 2010-關於VS的一個小測試程序問題,函數調用順序

visual studio 2010-關於VS的一個小測試程序問題,函數調用順序

編輯:編程綜合問答
關於VS的一個小測試程序問題,函數調用順序

新手學C++,把C++ primer 上的兩個例子用Visual Studio 2010弄到一起的時候出現了一個問題。

一共用了三個函數放在三個cpp文件,被調用的兩個均用頭文件進行了聲明。

兩個函數實現的功能很簡單分別是:1、多個數相加求和(plus()) 2、輸入兩個數字作為上界和下界並求和。(two_num())

問題出現在:在main函數下進行調用的時候,

先調用two_num();再調用plus()可以正常執行。

#include "1-4-3.h"
#include "1-4-4.h"
int main()
{

 two_num();  //函數1

std::cout<<"多個數相加"<<std::endl<<std::endl<<"輸入各數字,以ctrl+z,回車結束輸入。"<<std::endl<<std::endl;

 plus(); //函數2,兩個函數調換先後順序執行,就出錯。即把上面的two_num()剪切到plus()下面,再執行就出錯

system("pause");
return 0;

}
CSDN移動問答
如果先調用plus();再調用two_num();則會出錯,只能執行出第一個函數的結果,第二個就無法輸入了。
int main()
{

std::cout<<"多個數相加"<<std::endl<<std::endl<<"輸入各數字,以ctrl+z,回車結束輸入。"<<std::endl<<std::endl;

 plus(); //函數2
    two_num();  //函數1

system("pause");
return 0;

}
CSDN移動問答

項目截圖:CSDN移動問答

各文件內容:

//1-4-3.h
int two_num();

//1-4-4.h
int plus();

//1-4-3.cpp

#include
int two_num()
{
std::cout<<"Enter two numbers: "< int v1,v2;
std::cin>>v1>>v2;
int lower,upper;
if (v1<=v2){
lower=v1;
upper=v2;
}
else {
lower=v2;
upper=v1;
}
int sum=0;
for (int val=lower; val<=upper; ++val)
sum += val;
std::cout<<"Sum of "<<lower<<" to "<<upper
<<" inclusive is "<<sum<<std::endl;
return 0;

}

//1-4-4.cpp

#include
int plus()
{
int sum=0,value;
while (std::cin>>value)
sum += value;
std::cout<<"Sum is: "<<sum<<std::endl;
return 0;

}

//main.cpp

#include
#include "1-4-3.h"
#include "1-4-4.h"

int main()
{

std::cout<<"多個數相加"<<std::endl<<std::endl<<"輸入各數字,以ctrl+z,回車結束輸入。"<<std::endl<<std::endl;

plus();//函數2,兩個函數調換先後順序執行,就出錯。即把上面的two_num()剪切到plus()下面,再執行就出錯
two_num();//函數1
system("pause");
return 0;

}

請教了下學長,討論後找到了解決方法。原理不知道對不對。

*問題可能出現在函數plus()的輸入結束上面。C++ primer上有說要結束輸入“需要輸入文件結束符 windows下是Ctrl+z,或者遇到無效輸入時(如讀取了一個不是整數的值),則istream對象是無效的。處於無效狀態的istream對象將導致條件失敗”。
先執行two_num函數再執行plus沒出現問題是由於前者輸入均為有效狀態。
換過之後,由於執行plus函數後已經輸入了結束符導致istream對象無效,導致後續無法進行輸入,故two_num函數無法正常調用。
(即不能用文件結束符或者非整數的數值作為輸入結束,而應該用一個自定的結束標志結束輸入,如下面修改的代碼)
檢測方法是把plus中的語句while (std::cin>>value)改成
int plus()
{
int sum=0,value;
std::cin>>value;
while (value!=0)
{
sum += value;
std::cin>>value;
}
std::cout<<"Sum is: "<<sum<<std::endl;
return 0;

}*

最佳回答:


請教了下學長,討論後找到了解決方法。原理不知道對不對。

*問題可能出現在函數plus()的輸入結束上面。C++ primer上有說要結束輸入“需要輸入文件結束符 windows下是Ctrl+z,或者遇到無效輸入時(如讀取了一個不是整數的值),則istream對象是無效的。處於無效狀態的istream對象將導致條件失敗”。
先執行two_num函數再執行plus沒出現問題是由於前者輸入均為有效狀態。
換過之後,由於執行plus函數後已經輸入了結束符導致istream對象無效,導致後續無法進行輸入,故two_num函數無法正常調用。
(即不能用文件結束符或者非整數的數值作為輸入結束,而應該用一個自定的結束標志結束輸入,如下面修改的代碼)
檢測方法是把plus中的語句while (std::cin>>value)改成
int plus()
{
int sum=0,value;
std::cin>>value;
while (value!=0)
{
sum += value;
std::cin>>value;
}
std::cout<<"Sum is: "<<sum<<std::endl;
return 0;

}*

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved