主題: [C&C++] [問題]vc++的問題 已放上那3題MFC跟其他資料 [打印本頁]
發表人:
h80053 時間: 2006-3-16 12:36 PM 主題: [問題]vc++的問題 已放上那3題MFC跟其他資料
請問大家如何用VC++用螢幕顯示出下面的畫面
1
2 2
3 3 3
4 4 4 4
5 5 5 5
我只知道用
COUT<<...................
COUT<<...................
COUT<<...................
COUT<<...................
COUT<<...................
可是老師說不能用那種寫法@@
所以想問大家能否用FOR IF這些指令打出來
謝謝
======================================================
以放入
http://webhd.xuite.net/main.php?
帳號 b0986025055 密0937792834
請自取
[h80053 在 2006-6-22 06:01 PM 作了最後編輯]
發表人:
Johnny Brove 時間: 2006-3-16 01:24 PM
可能寫得不是很好看
for ( int number = 1; number <= 5; number++ )
{
for ( int counter = 0; counter < number; counter++ )
{
if ( counter < 4 )
{
cout << number << " ";
}
}
cout << endl;
}
發表人:
h80053 時間: 2006-3-16 05:18 PM
謝謝你 送花
發表人:
h80053 時間: 2006-3-16 05:26 PM
大大實在太強了能否解釋一下for ( int counter = 0; counter < number; counter++ )這段因為我不清楚這樣寫怎麼會變成
1
2 2
3 3 3
4 4 4 4
5 5 5 5
謝謝 (語言不行@@)
發表人:
Johnny Brove 時間: 2006-3-16 10:41 PM
代表在第"number"行會印出"number"個數字
counter從0到(number-1)
而裡面的if則是為了限定次數在4次以下
發表人:
h80053 時間: 2006-3-17 12:56 PM
謝謝了 研究完不會在問
發表人:
h80053 時間: 2006-3-17 05:04 PM
#include<iostream.h>
void main()
{
int a,b;
for(a=1;a<=5;a++)
{
for(b=2;b<=5;b++)
cout<<a<<'\n'<<b<<endl;
}
我是這樣寫,我想說這樣能變成
1
2 2
3 3
4 4
5 5
但是結果是
1
2
1
3
1
.
.
.
.
. 請問是哪裡有問題 謝謝
發表人:
Johnny Brove 時間: 2006-3-18 05:43 PM
for(b=2;b<=5;b++)
cout<<a<<'\n'<<b<<endl;
這代表不管你之前的a是多少
你的b從2跑到5共4次
而你的cout則是先跑出a再斷行
接著跑出b又再斷行
於是跑出:
a1
2
a1
3
a1
4
a1
5
a2
2
a2
3
a2
4
a2
5
以此類推
要寫成
1
2 2
3 3
4 4
5 5
我的作法是把a當行數,b當次數
所以在a跑完一圈之前斷行就夠了
而b則跟著a跑,在第幾行,他就跑第a個數字
[Johnny Brove 在 2006-3-18 05:55 PM 作了最後編輯]
發表人:
h80053 時間: 2006-3-19 04:20 PM
#include<iostream.h>
#include<math.h>
void main()
{ int i;
for(i=1;i<=20;i++)
cout<<"一到一百間五的倍數"<<i*5<<endl;
}
這是我寫的1到100間五的倍數的程式
我執行後發現會這樣
一到一百間五的倍數5
一到一百間五的倍數10
................... 15
.................. 20
..................... 25
請問如果要讓文字只出現一次的話是先將i*5 放在COUT的最前面嗎?
還有謝謝Johnny Brove 不送花不行
而b則跟著a跑,在第幾行,他就跑第a個數字??
[h80053 在 2006-3-19 04:23 PM 作了最後編輯]
發表人:
Johnny Brove 時間: 2006-3-19 04:28 PM
把cout<<"一到一百間五的倍數"拿到for迴圈外面
而b則跟著a跑,在第幾行,他就跑第a個數字??:
即第1行跑出來的是1
第2行是2,以此類推
發表人:
h80053 時間: 2006-3-19 04:38 PM
謝謝拉
發表人:
h80053 時間: 2006-3-21 07:07 PM
寫一個程式,重複以cin輸入整數,並成以mul變數中,當輸入為0時則結束
請問大大這要怎麼打?THANKS
發表人:
Johnny Brove 時間: 2006-3-21 11:21 PM
for ( int multiple = 1; multiple != 0; cout << mul )
{
cin >> multiple;
mul *= multiple;
}
發表人:
h80053 時間: 2006-3-23 12:02 PM
multiple != 0 中的 ! 是指?
因為我們用FOR的話是FOR(變數=數值:數值<=數值;數值++)
因此
for ( int multiple = 1; multiple != 0; cout << mul )
我看不懂@@
另外void main() 這是做什麼的??
先謝謝大大拉 送花
[h80053 在 2006-3-23 12:04 PM 作了最後編輯]
發表人:
Johnny Brove 時間: 2006-3-23 12:32 PM
!=是"不等於"的意思
void main()則是declare"不傳回value"的主函數
發表人:
h80053 時間: 2006-3-23 05:34 PM
for ( int multiple = 1; multiple != 0; cout << mul )
我看不懂@@
發表人:
Johnny Brove 時間: 2006-3-23 06:03 PM
在multiple不等於零的情況下
會一直重複進行for迴圈
並且每跑一次會執行一次cout << mul
發表人:
h80053 時間: 2006-3-23 07:27 PM
原來FOR也能這樣用 現在才知道=.=
1.試設計一程式可以輸入十個同學的姓名座號成績 輸入完後可以依 A座號 B分數高低 二種格式輸出
以下是我寫的但是問題好像很多 希望大大能指導一下看缺少了什麼或是問題
#include<iostream.h>
void main()
{
int d,e,f;
int a[10],b[10];
char c[10];
cout<<"請輸入座號"<<f<<endl;
cin >>a[d]>>endl;
cout<<"請輸入姓名"<<endl;
cin >>c[e]>>endl;
cout<<"請輸入分數"<<endl;
cin >>b[f]>>endl;
for(d=0;d<=10;d++)
cout<<a[d]<<"\n"<<c[e]<<"\n"<<b[f]<<endl;
謝謝
發表人:
Johnny Brove 時間: 2006-3-23 08:20 PM
首先在declaration方面,分數和座號可以只需要一個Number&Score[2][10]的array
然後在姓名方面最好不要用char(因為只能讀入一個字元)
可以使用字串型態
#include <string>
using std::string;
using std::getline;
string Name[10];
getline( cin, Name[n] )
配合for迴圈跑十次(n從0到9)
發表人:
h80053 時間: 2006-3-24 04:18 PM
所以說int d,e,f;
可以不用定義嘛??
字串我們還沒教到 CHAR那行有問題嘛??
FOR 是指讓姓名座號分數都跑十次嘛??
都寫for(d=0;d<=10;d++) 這樣
先謝過
發表人:
Johnny Brove 時間: 2006-3-24 08:06 PM
char當然不好啦
它一次只能存入一個字元啊(例如"G"或"5"等)
至於for寫一個就好啦:
for ( int StudentNum = 0; StudentNum < 10; StudentNum++ )
{
cin >> Name[ StudentNum ];
cin >> Number&Score[ 0 ][ StudentNum ];
cin >> Number&Score[ 1 ][ StudentNum ];
}
發表人:
h80053 時間: 2006-3-26 04:24 PM
#include<iostream.h>
void main()
{
int d,e,f;
int a[10][2];
char c[10];
for(a=0;a<=10;a++)
cout<<"請輸入座號"<<endl;
cin>>a[0]>>endl;
cout<<"請輸入姓名"<<endl;
cin>>c>>endl;
cout<<"請輸入分數"<<endl;
cin>>[1]>>endl;
cout<<a[0]<<"\n"<<c<<"\n"<<a[1]<<endl;
}
修改後,還是有錯誤以下是C++所顯示的錯誤
C:\Documents and Settings\TOKKO\My Documents\111\111.cpp(7) : error C2440: '=' : cannot convert from 'const int' to 'int [10][2]'
There are no conversions to array types, although there are conversions to references or pointers to arrays
C:\Documents and Settings\TOKKO\My Documents\111\111.cpp(7) : error C2446: '<=' : no conversion from 'const int' to 'int (*)[2]'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
C:\Documents and Settings\TOKKO\My Documents\111\111.cpp(7) : error C2040: '<=' : 'int [10][2]' differs in levels of indirection from 'const int'
C:\Documents and Settings\TOKKO\My Documents\111\111.cpp(7) : error C2105: '++' needs l-value
C:\Documents and Settings\TOKKO\My Documents\111\111.cpp(9) : error C2679: binary '>>' : no operator defined which takes a right-hand operand of type 'int [2]' (or there is no acceptable conversion)
C:\Documents and Settings\TOKKO\My Documents\111\111.cpp(15) : error C2059: syntax error : '['
Error executing cl.exe.
[ ] 這個東西好像不能被C++接受??
謝謝
發表人:
Johnny Brove 時間: 2006-3-26 04:40 PM
首先,for指令必須用{}把敘述包起來
你這樣只會重複執行cout<<"請輸入座號"<<endl;
還有int a[10]的話,裡面數字是從0~9,不能跑到10
接著,a[][]是個二元array,不能cin>>a[N]這樣用
最後,你要讓它跑loop,需要把variable弄到[]裡面
發表人:
h80053 時間: 2006-3-26 07:30 PM
修改一下有好一點但是只有跑出 請輸入座號輸入10次後 才跑出請輸入姓名 謝謝
#include<iostream.h>
#include<conio.h>
void main()
{
int d,e,f;
int a[10],b[10];
char c[10];
cout<<"請輸入座號"<<endl;
for(d=0;d<=9;d++) //設定a[10]時位址為0到9
cin>>a[d];
cout<<"請輸入姓名"<<endl;
for(e=0;e<=9;e++)
cin>>c[e];
cout<<"請輸入分數"<<endl;
for(f=0;f<=9;f++)
cin>>b[f];
cout<<a[d]<<"\n"<<c[e]<<"\n"<<b[f]<<endl;
}
[h80053 在 2006-3-26 07:44 PM 作了最後編輯]
發表人:
Johnny Brove 時間: 2006-3-26 11:13 PM
把array中的variable都設定成一樣
全部只需要用一個for就好啦= =|||
然後設定其scope包含住你想要重複的地方
發表人:
h80053 時間: 2006-3-27 08:49 AM
#include<iostream.h>
#include<conio.h>
void main()
{
int d;
int a[10],b[10];
char c[10];
for(d=0;d<=9;d++) //設定a[10]時位址為0到9
{
cout<<"請輸入座號"<<endl;
cin>>a[d];
cout<<"請輸入姓名"<<endl;
cin>>c[d];
cout<<"請輸入分數"<<endl;
cin>>b[d]; }
cout<<a[d]<<"\n"<<c[d]<<"\n"<<b[d]<<endl;
}
改過的結果,請問一下如果要 A座號 B分數高低 二種格式輸出??
現在已經可以正常輸入了 謝謝
發表人:
Johnny Brove 時間: 2006-3-27 04:04 PM
使用bubble sort:
紅字的部分是表示當a[counter+1] < a[counter]
則兩個value會swap
for ( int counter = 0, limit = 9; counter < 9; counter++, limit-- )
{
for ( int counter = 0; counter < limit; counter++ )
{
if ( a[counter+1] < a[counter] )
{
int temp = a[counter+1];
a[counter+1] = a[counter];
a[counter] = temp;
}
}
}
發表人:
h80053 時間: 2006-3-28 06:32 PM
如果這樣寫 照號碼排
#include<iostream.h>
#include<conio.h>
void main()
{
int d,e;
int a[10],b[10];
char c[10];
for(d=0;d<=9;d++) //設定a[10]時位址為0到9
{
cout<<"請輸入座號"<<endl;
cin>>a[d];
cout<<"請輸入姓名"<<endl;
cin>>c[d];
cout<<"請輸入分數"<<endl;
cin>>b[d]; }
cout<<a[d]<<"\n"<<c[d]<<"\n"<<b[d]<<endl;
for(e=0;e<9;e++)
if(a[e]<a[d])
cout<<a[e]<<[d]<<endl;
}
[h80053 在 2006-3-28 06:38 PM 作了最後編輯]
發表人:
Johnny Brove 時間: 2006-3-28 06:47 PM
這樣不行啊
如果a[e]>=a[d]不就沒東西跑出來了?
還是先從排序下手吧
另外在用bubble sort時,記得要把a[],b[],c[]都一起swap
我寫的那個只有swap一個array而已
發表人:
h80053 時間: 2006-3-28 07:06 PM
如果要照號碼排列的話,我已經在一開始設了for(d=0;d<=9;d++) 讓{}裡面東西跑10次.
要照號碼的話是要在內洄圈外面再多加上一個FOR的敘述嗎
如
int d,e;
int a[10],b[10];
char c[10];
for(d=0;d<=9;d++)
這裡 在多加一個=> for( )
謝謝
發表人:
Johnny Brove 時間: 2006-3-28 11:11 PM
for(d=0;d<=9;d++)只是輸入啊
要照號碼排列的話
我之前不是寫了一個bubble sort的example了嗎?
主要是兩兩比較,然後不斷的把大的(或小的)往上推
發表人:
h80053 時間: 2006-3-29 06:27 AM
for ( int counter = 0, limit = 9; counter < 9; counter++, limit-- )
{
for ( int counter = 0; counter < limit; counter++ )
{
if ( a[counter+1] < a[counter] )
{
int temp = a[counter+1];
a[counter+1] = a[counter];
a[counter] = temp;
}
}
}
counter是指??l imit是指??
[h80053 在 2006-3-29 06:29 AM 作了最後編輯]
發表人:
Johnny Brove 時間: 2006-3-29 08:08 AM
算了
你把它改成這樣就好了
for ( int counter = 0; counter < 9; counter++ )
{
for ( int counter = 0; counter < 9; counter++ )
如同我之前講的,就是一直把較大的往上疊
發表人:
h80053 時間: 2006-3-29 01:41 PM
#include<iostream.h>
void main()
{
int d,e=10,f,g;
int a[10],b[10];
char c[10];
for(d=0;d<=9;d++)
{ cout<<"請輸入座號"<<endl;
cin >>a[d];
cout<<"請輸入姓名"<<endl;
cin >>c[d];
cout<<"請輸入分數"<<endl;
cin >>b[d];
}
cout<<a[d]<<"\n"<<c[d]<<"\n"<<b[d]<<endl;
for(d=0;d<e-1;d++)
for(f=d;f<e;f++)
if(a[d]>a[f])
{ g=a[d];
a[d]=a[f];
a[f]=g;
}
cout<<"座號"<<"姓名"<<"分數";
for(d=0;d<e;d++)
cout<<a[d]<<c[d]<<b[d];
}
發表人:
Johnny Brove 時間: 2006-3-29 06:46 PM
for ( d = 0; d < e - 1; d++ )
{
for ( f = d; f < e; f++ )
{
if ( a[d] > a[f] )
{
g = a[d];
a[d] = a[f];
a[f] = g;
}
}
}
這樣你一次只會交換a[]
其他的當然不會動啦
另外,請注意code的排版
這樣子寫真的很不好看
發表人:
h80053 時間: 2006-3-29 08:17 PM
如果說要讓此程式一成績高低跑的話
還要加什麼CODE??
氣泡排序中的內洄圈外洄圈能吼請大大指導一下
看的花花的
謝謝
[h80053 在 2006-3-29 08:21 PM 作了最後編輯]
發表人:
Johnny Brove 時間: 2006-3-29 08:44 PM
外洄圈只是跑n次內迴圈罷了
而run"內迴圈"是利用兩兩大小比較而互換
把最大值浮到最上面
接著run則是把次大值浮到第二個
以此類推
所以要修改的話
if ( a[d] > a[f] )
{
g = a[d];
a[d] = a[f];
a[f] = g;
}
就從這裡著手啊
把所有的array都一同變換
發表人:
h80053 時間: 2006-3-29 10:03 PM
意思是說
if ( a[d] > a[f] )
{
g = a[d];
a[d] = a[f];
a[f] = g;
}
把a[d]裡的變數改成a[b]ora[c]
謝謝
發表人:
Johnny Brove 時間: 2006-3-30 12:29 AM
看你決定要用那個array去判斷啊
此外,雖然只用一個判斷
但是必須三個array同時調換啊
不然以你寫的為例
a[d]變成了a[f]
而c[d]及b[d]沒一起調換
那就號碼不對姓名及分數了
最後,想學程式還是得買本書來看
我這樣講也不能說得很明白
"頂多"幫你除個錯罷了
發表人:
h80053 時間: 2006-3-30 12:30 PM
再請問大大一下 如果說我的cout<<"請輸入姓名"<<endl; 這一個我如果要輸入 中文字的話那
int d,e=10,f,g;
int a[10],b[10];
char c[10]; ==> 這一個要怎麼修改??
因為我的cout<<"請輸入姓名"<<endl; 這一個只能輸入數字
我看了課本他是寫說 char 字串變數[字串長度]="字串資料":
但是如果這麼打的話 我就不能自己輸入要的姓名
下面這個是依照大大的說法後改的(依成績排列)
#include<iostream.h>
void main()
{
int d,e=10,f,g;
int a[10],b[10];
char c[10];
for(d=0;d<=9;d++)
{ cout<<"請輸入座號"<<"\t"<<"請輸入姓名"<<"\t" <<"請輸入分數"<<endl;
cin >>a[d];
cin >>c[d];
cin >>b[d];
}
for(d=0;d<e-1;d++)
for(f=d;f>e;f++)
if(b[d]>b[f])
{ g=b[d];
b[d]=b[f];
b[f]=g;
}
for(d=0;d<e;d++)
cout<<"座號"<<a[d]<<"\t"<<"姓名"<<c[d]<<"\t"<<"分數"<<b[d]<<endl;;
}
我照這樣run不可以照成績順序排列
先謝謝大大了
[h80053 在 2006-3-30 12:38 PM 作了最後編輯]
發表人:
Johnny Brove 時間: 2006-3-30 05:52 PM
第一個問題我說過了
用string來做型態(需include string的header file)
第二個的bug在此
for ( d = 0; d < e - 1; d++ )
{
for ( f = d; f > e; f++ )
{
if ( b[d] > b[f] )
{
g = b[d];
b[d] = b[f];
b[f] = g;
}
}
}
另外,我講過第三遍了
你array沒有三個同時排序
一定會出現號不對名的情形
最後,請一定做好程式排版
你這樣子寫出來的程式
看的人一定會受不了
[Johnny Brove 在 2006-3-30 05:55 PM 作了最後編輯]
發表人:
h80053 時間: 2006-3-30 08:52 PM
我在想想看要怎麼做程式這東西還真不好懂
也謝謝大大的指導
[h80053 在 2006-3-30 08:54 PM 作了最後編輯]
發表人:
h80053 時間: 2006-3-30 11:13 PM
for(d=0;d<e-1;d++)
{ for(f=d;f>e;f++)
if(a[d]>a[f])
{ g=b[d];
b[d]=b[f];
b[f]=g;
}
將符號改過後還是指照號碼排列
同時排序已經知道少什麼了
謝謝
發表人:
Johnny Brove 時間: 2006-3-30 11:50 PM
我用紅字弄出來,你沒看到嗎?
for ( f = d; f > e; f++ )
發表人:
h80053 時間: 2006-3-31 09:11 AM
我把F>E改掉後還是無法照呈機高低排列??
發表人:
Johnny Brove 時間: 2006-3-31 11:51 AM
請先仔細想想為什麼要改
不改的話又會怎樣子?
你才能知道要改成什麼
發表人:
h80053 時間: 2006-4-1 10:05 AM
我的想法是一開始用座號排列的話是由小到大,當換成分數排列的話是由大而小.所以我想如果比符號改掉,讓IF的比較相反
使高的分數往上推.如果沒改的話還是會照排座號一樣.從一號開始排
發表人:
Johnny Brove 時間: 2006-4-2 02:28 PM
如果你是要由大而小
最簡單的方法就是把cout的順序倒過來就好了
不然就是把內迴圈所跑的方向reverse
發表人:
adolclistin 時間: 2006-4-4 02:49 AM
請問
怎麼獲得影像中每個點的R,G,B值呢@@"
發表人:
aaron71101433 時間: 2006-4-5 01:27 AM
MFC的話,參考CImage類別,BCB的話,請參考TImage類別,如果要自己寫程式讀取的話,那要看檔案格式來決定...
發表人:
adolclistin 時間: 2006-4-5 03:47 AM
那如果要自己寫一各讀取BMP圖檔格式
並紀錄每各點的R G B三個顏色值呢?
現在只會用範例程式把圖片讀取出來
但是卻不會獲得每各點的資訊值
發表人:
aaron71101433 時間: 2006-4-5 01:12 PM
BMP的格式請參考
http://web.uccs.edu/wbahn/ECE102 ... S/bmpfileformat.htm
BMP是沒經過壓縮的格式,所以讀檔是沒什麼技巧可言的,就是按照檔案格式讀取而已,所以沒必要的話,用現成的API就行了,而JPEG這類有經過DCT轉換的格式,要自己弄又更麻煩了,可能要有點數學基礎才有辦法實作...
發表人:
adolclistin 時間: 2006-4-6 09:21 PM
謝謝你~我試試看~
感激不盡ˊˇˋ
發表人:
h80053 時間: 2006-4-28 12:23 AM
問一下這題 tan28*tan62+tan^35-sec^35=
老師說答案要是0 可是我寫出來的程式是-1
tan28*tan62===>1 tan^35-sec^35===>-1
只算三角函數值的整數值 的話結果會是1-1=0 以下是我寫的程式算出來是-1
#include<iostream.h>
#include<math,h>
int o,g,r,t;
double x,y,q,w;
x=(3.14)/180*28;
y=(3.14)/180*62;
q=(3.14)/180*35;
w=(3.14)/180*35;
o=tan(x);
g=tan(y);
r=1/cos(w)*1/cos(w);
t=tan(q)*tan(q);
cout<<"tan28*tan62+tan^35-sec^35="<<floor(o)*floor(g)+floor(t)-floor(r)<<endl;;
謝謝
[h80053 在 2006-4-28 12:28 AM 作了最後編輯]
發表人:
aaron71101433 時間: 2006-4-29 02:56 PM
參考一下這程式吧
double x,y,q,w;
double PI = 3.1415926;
x=28.0 / (180.0 / PI);
y=62.0 / (180.0 / PI);
q=35.0 / (180.0 / PI);
w=35.0 / (180.0 / PI);
printf("tan28*tan62 = %f, tan^35-sec^35= %f, tan28*tan62+tan^35-sec^35=%d\n",
tan(x) * tan(y),
tan(q) - 1/cos(w),
floor(tan(x)*tan(y))+floor(tan(q)-1/cos(w)));
發表人:
h80053 時間: 2006-4-29 04:05 PM
謝謝喔
發表人:
h80053 時間: 2006-4-30 07:12 PM
我RUN了一下好像是-1說
發表人:
aaron71101433 時間: 2006-5-1 12:49 PM
tan28*tan62 = 1.000000, tan^35-sec^35= -0.520567, tan28*tan62+tan^35-sec^35=0
這是我的執行結果...
發表人:
h80053 時間: 2006-5-10 08:30 PM
在問個問題
#include<iostream.h>
#include<conio.h>
struct score
{ int n;
char na[10];
int chi;
int eng;
int mat;
double are;
} ;
void main()
{int a,u;
score c[10];
cout<<"請輸入學生座號姓名及小考期中期末成績"<<endl;
cin>>u
switch (u)
{
case 1:
for(a=0;a<3;a++)
{ cout<<"座號=";
cin>> c[a].n;
cout<<"姓名=";
cin>>c[a].na;
cout<<"小考=";
cin>>c[a].chi;
cout<<"期中=";
cin>>c[a].eng;
cout<<"期末=";
cin>>c[a].mat;
c[a].are=(c[a].chi+c[a].eng+c[a].mat)/3;
}
for(int b=0;b<3;b++)
for(int d=b+1;d<4;d++)
if(c[b].are<c[d].are)
{score temp=c[b];
c[b]=c[d];
c[d]=temp;
}
cout<<"按照成績高低排序後"<<endl;
for(int e=0;e<3;e++)
cout<<"座號"<<c[e].n<<"\t"<<"姓名"<<c[e].na<<"\t"<<"小考"<<c[e].chi<<"\t"<<"期中"<<c[e].eng<<"\t"<<"期末"<<c[e].mat<<"\t"<<"總平均"<<c[e].are<<endl;
case 2:
cout<<"1111"<<endl;
}
}
編譯以後他會說CASE2有問題 不知道是不是SWITCH用錯還是怎樣的 只要沒有用到CASE2錢一個程式是ok的
請大大們幫忙一下 謝謝
發表人:
h80053 時間: 2006-5-16 06:12 PM
有人能幫忙解答嗎??
發表人:
Johnny Brove 時間: 2006-5-16 06:57 PM
如果是用switch,在最後要寫一個default
另外,除非是需要重疊使用
不然要在每個case間使用break
發表人:
h80053 時間: 2006-5-17 01:40 PM
Compiling...
1111.cpp
C:\Documents and Settings\USER\桌面\1111.cpp(55) : error C2360: initialization of 'y' is skipped by 'case' label
C:\Documents and Settings\USER\桌面\1111.cpp(49) : see declaration of 'y'
C:\Documents and Settings\USER\桌面\1111.cpp(55) : error C2360: initialization of 'b' is skipped by 'case' label
C:\Documents and Settings\USER\桌面\1111.cpp(40) : see declaration of 'b'
Error executing cl.exe.
1111.obj - 2 error(s), 0 warning(s)
發表人:
Johnny Brove 時間: 2006-5-17 05:54 PM
是最近的程式碼嗎?
compile除了cin>>u未加;
並未有其他問題吧(compiler不同?)
還有你的y是哪裡來的?
發表人:
h80053 時間: 2006-5-17 07:40 PM
我想說變數換其它的來看看 會不會就OK 我CIN有加: 還是有錯誤 謝謝
發表人:
Johnny Brove 時間: 2006-5-17 08:53 PM
這樣我就可以compile了
還會出錯嗎?
(break及default為個人習慣而加的,不影響compile結果)
#include<iostream>
using std::cin;
using std::cout;
using std::endl;
#include<conio.h>
struct score
{
int n;
char na[10];
int chi;
int eng;
int mat;
double are;
};
void main()
{
int a,u;
score c[10];
cout<<"請輸入學生座號姓名及小考期中期末成績"<<endl;
cin>>u;
switch (u)
{
case 1:
for(a=0;a<3;a++)
{
cout<<"座號=";
cin>> c[a].n;
cout<<"姓名=";
cin>>c[a].na;
cout<<"小考=";
cin>>c[a].chi;
cout<<"期中=";
cin>>c[a].eng;
cout<<"期末=";
cin>>c[a].mat;
c[a].are=(c[a].chi+c[a].eng+c[a].mat)/3;
}
for(int b=0;b<3;b++)
for(int d=b+1;d<4;d++)
if ( c[ b ].are < c[ d ].are )
{
score temp=c[b];
c[b]=c[d];
c[d]=temp;
}
cout<<"按照成績高低排序後"<<endl;
for(int e=0;e<3;e++)
cout<<"座號"<<c[e].n<<"\t"<<"姓名"<<c[e].na<<"\t"<<"小考"<<c[e].chi<<"\t"<<"期中"<<c[e].eng<<"\t"<<"期末"<<c[e].mat<<"\t"<<"總平均"<<c[e].are<<endl;
break;
case 2:
cout<<"1111"<<endl;
break;
default:
break;
}
}
[Johnny Brove 在 2006-5-17 09:16 PM 作了最後編輯]
發表人:
h80053 時間: 2006-5-18 07:15 AM
謝謝 拿去C上面試試
using std::cin;
using std::cout;
using std::endl;
這3行是指??
編譯以後的結果 還是一樣狀況 不知道是哪有問題
Compiling...
125.cpp
c:\documents and settings\tokko\my documents\重佑のc++專區\121\125.cpp(111) : error C2360: initialization of 'e' is skipped by 'case' label
c:\documents and settings\tokko\my documents\重佑のc++專區\121\125.cpp(105) : see declaration of 'e'
c:\documents and settings\tokko\my documents\重佑のc++專區\121\125.cpp(111) : error C2360: initialization of 'b' is skipped by 'case' label
c:\documents and settings\tokko\my documents\重佑のc++專區\121\125.cpp(85) : see declaration of 'b'
c:\documents and settings\tokko\my documents\重佑のc++專區\121\125.cpp(117) : error C2361: initialization of 'e' is skipped by 'default' label
c:\documents and settings\tokko\my documents\重佑のc++專區\121\125.cpp(105) : see declaration of 'e'
c:\documents and settings\tokko\my documents\重佑のc++專區\121\125.cpp(117) : error C2361: initialization of 'b' is skipped by 'default' label
c:\documents and settings\tokko\my documents\重佑のc++專區\121\125.cpp(85) : see declaration of 'b'
Error executing cl.exe.
125.obj - 4 error(s), 0 warning(s)
剛剛請同學試了一下他說:
如果要用switch 就不能在迴圈內直接定義ex: (for int 變數 .......);
結果把INT拿掉就沒錯了=.=
[h80053 在 2006-5-18 09:39 PM 作了最後編輯]
發表人:
Acute 時間: 2006-5-18 09:58 PM
應該可以的, 你嘗試看看 (我比較懶, 懶得去嘗試)
程式寫成:
case 1:
{
for (int i=0; i < 100 ; i++ )
...
}
使用{} 將區段格出來, 通常一些怪怪限制都會消失
其實那是compiler 沒寫好, 並非語言定義不行那樣寫
Acute.
發表人:
h80053 時間: 2006-5-19 12:18 PM
謝謝你的指教 我在試試看
試過的結果是 他會說你的CASE2是不合法的??
[h80053 在 2006-5-19 12:21 PM 作了最後編輯]
發表人:
Acute 時間: 2006-5-19 12:50 PM
你用哪一國的C++ compiler
寫法上應該是:
case 1:
{
.....
}
case 2:
{
.......
}
也就是, 每個case 的內容獨立包起來
Acute.
發表人:
Johnny Brove 時間: 2006-5-19 01:22 PM
引用:
Acute寫到:
寫法上應該是:
case 1:
{
.....
}
case 2:
{
.......
}
也就是, 每個case 的內容獨立包起來
可是一般的C++參考書並沒有這樣寫啊
應該是不一定必要吧?
紅字的部份都算是case1的敘述
case 1:
...............;
...............;
break;
發表人:
Acute 時間: 2006-5-19 02:27 PM
引用:
Johnny Brove寫到:
引用:
Acute寫到:
寫法上應該是:
case 1:
{
.....
}
case 2:
{
.......
}
也就是, 每個case 的內容獨立包起來
可是一般的C++參考書並沒有這樣寫啊
應該是不一定必要吧?
紅字的部份都算是case1的敘述
case 1:
...............;
...............;
break;
這種寫法, 其實是為了C, 而不是為了C++, 只是一種相容的應用
早期C 並不能像C++ 一樣, 要使用時才宣告變數
但是C 有local 變數的規範與範疇
所以, 為了讓程式碼在移植不同C/C++ compiler 過程沒有問題
最快速的方法, 就是把有新寫法的程式碼框起來
程式語言說穿了, 就是看compiler 是不是做到符合標準
當你遇到一個不夠標準的compiler, 又必須使用他
唯一的方法就是去適應他, 因為你不可能去改compiler
但是, 修改過程, 總不可能把程式重寫一次 (學生作業例外, 反正很短)
所以, 適當了解程式語言的機制, 利用語言其他輔助機制, 讓程式相容於不同的compiler
這種東西, 永遠不會出現在書本裡面
況且, 程式語言很多定義也常常被人所忽略
我曾經在讀書會版面發布過一篇我以前研究C 的文章 (擷取自我發表於雜誌與書本的內容)
裡面就針對K&R C & ANSI C 差異性進行探討
該文章發布的原因, 就是ANSI C 被制定後,
發現很多工程師對於移植K&R C to ANSI C 過程中, 總是無法順利解決問題
原始目的是給同僚看, 後來大家都覺得不錯, 就修飾&擴充內容後, 發表於雜誌
最後又收錄到我無聊寫的書本裡面
Acute.
發表人:
h80053 時間: 2006-5-19 05:50 PM
這一段真是深奧 看不懂@@ 謝謝
--------------------Configuration: 結構排序 - Win32 Debug--------------------
Compiling...
結構排序.cpp
C:\Documents and Settings\TOKKO\My Documents\重佑のC++專區\2006 5.17最新的作業(結構排序)\結構排序.cpp(66) : error C2046: illegal case
Error executing cl.exe.
結構排序.obj - 1 error(s), 0 warning(s)
[h80053 在 2006-5-19 05:53 PM 作了最後編輯]
發表人:
Acute 時間: 2006-5-19 07:23 PM
結論就是... 你用的C++ compiler 實在不標準到令人受不了的地步
你就乖乖把變數都宣告到function 開始的位置, 回復傳統寫法, 就好了, 呵
不然, 就是換個compiler
Acute.
發表人:
Johnny Brove 時間: 2006-5-19 07:38 PM
引用:
Acute寫到:
況且, 程式語言很多定義也常常被人所忽略
我曾經在讀書會版面發布過一篇我以前研究C 的文章 (擷取自我發表於雜誌與書本的內容)
裡面就針對K&R C & ANSI C 差異性進行探討
該文章發布的原因, 就是ANSI C 被制定後,
發現很多工程師對於移植K&R C to ANSI C 過程中, 總是無法順利解決問題
原始目的是給同僚看, 後來大家都覺得不錯, 就修飾&擴充內容後, 發表於雜誌
最後又收錄到我無聊寫的書本裡面
請問在那裡?
我滿想看的!
發表人:
Acute 時間: 2006-5-20 09:01 PM
就在"讀書會"的版面裡面囉
我記得... 標題是... 小神童C 語言筆記... 之類的, 呵
論壇只要人多, 我很難逛論壇, 慢的跟龜一樣, so, 自己找吧 ^^"
Acute.
發表人:
Johnny Brove 時間: 2006-5-20 09:26 PM
找到了
http://twed2k.org/viewthread.php?tid=49786&fpage=1
果然是程式高手
可惜您年紀太大了
不然我也很願意叫你小神童
發表人:
Acute 時間: 2006-5-21 07:14 AM
引用:
我才13歲... 怎會年紀大
Acute.
發表人:
h80053 時間: 2006-6-7 06:54 PM
1.試設計一台灣樂透彩開獎模擬程式,按開獎可開出6組一般號及一特別號,排序輸出則可將一般號由小到大排序輸出。
2.試設計一程式可以執行積分cos2拍dt的計算,其中起始時間及終止時間可於下列畫面中輸入,按積分計算按鈕可輸出積分值。
3.試設計一密碼登錄程式,可輸入三個使用者,a1,a2,a3,其密碼分別為asd,qwe,hhf,若輸入正確,則顯示出登入成功的訊息視窗,若輸入錯誤則顯示出登入錯誤的訊息視窗。
謝謝
發表人:
h80053 時間: 2006-6-9 12:25 PM
有高手能幫忙一下嗎??謝謝啦
[h80053 在 2006-6-11 08:08 PM 作了最後編輯]
發表人:
swimman 時間: 2006-7-13 02:22 AM
引用:
Johnny Brove寫到:
for ( int multiple = 1; multiple != 0; cout << mul )
{
cin >> multiple;
mul *= multiple;
}
個人覺得這個是無窮迴圈
還是用while來寫語意比較明確
發表人:
eleachaose 時間: 2006-11-1 01:49 PM
引用:
h80053寫到:
1.試設計一台灣樂透彩開獎模擬程式,按開獎可開出6組一般號及一特別號,排序輸出則可將一般號由小到大排序輸出。
2.試設計一程式可以執行積分cos2拍dt的計算,其中起始時間及終止時間可於下列畫面中輸入,按積分計算按鈕可輸出積分值。
3.試設計一密碼登錄程式,可輸入三個使用者,a1,a2,a3,其密碼分別為asd,qwe,hhf,若輸入正確,則顯示出登入成功的訊息視窗,若輸入錯誤則顯示出登入錯誤的訊息視窗。
謝謝
請問一下 撰寫的程式碼是必須包含你的視窗的專案 還是僅止要開獎程式碼就OK
發表人:
h80053 時間: 2006-11-1 10:36 PM
都需要包含 謝謝
歡迎光臨 TWed2k (http://twed2k.org/) |
Powered by Discuz! 4.1.0 |