上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
timchio 偶而上來逛逛的過客
註冊時間: 2010-08-02 文章: 7
80.34 果凍幣
|
發表於: 2010-8-2, PM 11:47 星期一 文章主題: 想請問一下大大 |
|
|
不好意思我也是最近才學的新手
我發現標頭檔中的limits和windows.h中存在點問題
就是在大大您教的除錯部份
其中的
cin.ignore(numeric_limits<streamsize>::max(), '/n');
這部分的max()會怪怪的
假如標頭檔只有使用limits的話就無這問題
假如多增加了windows.h這部份的話就會跑出max() ()裡面要加東西
我會加windows.h的原因是因為我想延時跑的時間
還是大大有其他方式可以延時
或者可以解決這標頭檔的方式 |
|
回頂端 |
|
|
yag Site Admin
註冊時間: 2007-05-02 文章: 689
2704.11 果凍幣
|
發表於: 2010-8-3, PM 5:58 星期二 文章主題: Re: 想請問一下大大 |
|
|
timchio 寫到: | 不好意思我也是最近才學的新手
我發現標頭檔中的limits和windows.h中存在點問題
就是在大大您教的除錯部份
其中的
cin.ignore(numeric_limits<streamsize>::max(), '/n');
這部分的max()會怪怪的
假如標頭檔只有使用limits的話就無這問題
假如多增加了windows.h這部份的話就會跑出max() ()裡面要加東西
我會加windows.h的原因是因為我想延時跑的時間
還是大大有其他方式可以延時
或者可以解決這標頭檔的方式 |
加了windows.h後,應該只是提示你有另一種max函式
就算不加東西,compile應該一樣會過才對
如果不會過,還請把錯誤訊息po上來,比較方便回覆,謝謝 |
|
回頂端 |
|
|
yag Site Admin
註冊時間: 2007-05-02 文章: 689
2704.11 果凍幣
|
發表於: 2010-8-3, PM 6:05 星期二 文章主題: |
|
|
denisgod 寫到: | 有個很神奇的現象
我把大大的程式co到dev c++去跑
輸入1586的時候 出現數字重複
我把輸出的數字調出來發現 當i=2 pow(10,i)=99
導致他計算上變成1591 有重複數字
可以請教這是什麼原因 應該怎麼處理嗎? 謝謝 |
抱歉,都忘了你有留言@@"
唔…變成99的原因應該是因為pow函式是以浮點數在計算的
所以有其不精確性
處理方式可以自己編寫一個pow函式,大致如下:
代碼: | int myPow( int num, int times )
{
if( times == 0 ) num = 1;
else if( times > 0 )
{
for( int i = 1; i < times; ++i )
num *= num;
}
else
{
for( int i = 1; i < times; ++i )
num *= num;
num = 1 / num;
}
return num;
} |
|
|
回頂端 |
|
|
timchio 偶而上來逛逛的過客
註冊時間: 2010-08-02 文章: 7
80.34 果凍幣
|
發表於: 2010-8-3, PM 6:30 星期二 文章主題: |
|
|
代碼: | #include <iostream>
#include <limits>
#include <Windows.h>
using namespace std;
void main()
{
int I;
cout<<"測試是否開得起檔案"<<endl;
system("pause");
cin>>I;
if (cin.fail())
{
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '/n');
}
cout<<I<<endl;
} |
代碼: |
1>------ 已開始建置: 專案: TimC, 組態: Release Win32 ------
1>已經開始建置於 2010/8/3 下午 06:23:55。
1>InitializeBuildStatus:
1> 由於指定了 "AlwaysCreate",因此正在建立 "Release\TimC.unsuccessfulbuild"。
1>ClCompile:
1> test.cpp
1>test.cpp(15): warning C4003: 巨集 'max' 的實質參數不足
1>test.cpp(15): error C2589: '(' : '::' 右邊的語彙基元不合法
1>test.cpp(15): error C2143: 語法錯誤 : 遺漏 ')' (在 '::' 之前)
1>test.cpp(15): error C2059: 語法錯誤 : ')'
1>
1>建置失敗。
1>
1>經過時間 00:00:01.29
========== 建置: 0 成功、1 失敗、0 最新、0 略過 ========== |
錯誤部份大致是這樣,假如去調windows.h就無此問題 |
|
回頂端 |
|
|
yag Site Admin
註冊時間: 2007-05-02 文章: 689
2704.11 果凍幣
|
發表於: 2010-8-3, PM 9:14 星期二 文章主題: |
|
|
這是因為2010版的windows.h多了個max巨集
造成precompiler認知錯誤
你只要把
代碼: | cin.ignore(numeric_limits<streamsize>::max(), '/n'); |
改成
代碼: | cin.ignore((numeric_limits<streamsize>::max)(), '/n'); |
即可
precompiler會認知此max非為巨集 |
|
回頂端 |
|
|
timchio 偶而上來逛逛的過客
註冊時間: 2010-08-02 文章: 7
80.34 果凍幣
|
發表於: 2010-8-4, PM 1:12 星期三 文章主題: |
|
|
謝謝大大分享
對我這新手很有幫助
我在上網看到#undef max
這解決方法
順便請問大大
這方法便利性不知道清不清楚
可不可以解略小簡介一下^^ |
|
回頂端 |
|
|
yag Site Admin
註冊時間: 2007-05-02 文章: 689
2704.11 果凍幣
|
發表於: 2010-8-8, AM 11:32 星期日 文章主題: |
|
|
timchio 寫到: | 謝謝大大分享
對我這新手很有幫助
我在上網看到#undef max
這解決方法
順便請問大大
這方法便利性不知道清不清楚
可不可以解略小簡介一下^^ |
你#undef後
max巨集就不能使用了
不是很建議這樣做
直接加個括號的作法是比較好的
也比較方便 |
|
回頂端 |
|
|
happylin 略有貢獻的成員
註冊時間: 2007-07-26 文章: 70
127.34 果凍幣
|
發表於: 2010-8-10, AM 10:03 星期二 文章主題: |
|
|
引言回覆: |
代碼: |
for( i = 0; i < 4; i++ )
{
Guess[i] = Input / ( 1000 / (int)pow( 10, i ) );
Input -= Guess[i] * (int)pow( 10, 3 - i ); // 減掉較高位數的數字
} |
|
上面這段程式.如果是我不會這樣寫. 還掉用到 math.h 中的pow function. 此問題跟本不需要用到pow function 就可以解決了
如下
代碼: |
int i;
for( i = 3 ; i >=0 ; --i )
{
Guess[i]=Input%10;
Input/=10;
}
|
|
|
回頂端 |
|
|
|