它應該是功能依賴于由用戶選擇的范圍回傳兩個亂數,我讀我可以使用指標從一個函式回傳兩個值,但我得到的錯誤expected an identifier前右int* ran1和int* ran2,當我運行代碼我得到的錯誤 expected ')' before 'int'這兩個ran1和ran2是全域變數。即使我對指標使用不同的名稱,我仍然會遇到相同的錯誤。
int level(lev, ran1, ran2, int* ran1, int* ran2){
srand(time(0));
if(lev == 'l'){
ran1=(rand()%10 1);
ran2=(rand()%10 1);
}
if(lev == 'm'){
ran1=(rand()%50 11);
ran2=(rand()%50 11);
}
if(lev == 'h'){
ran1=(rand()%100 51);
ran2=(rand()%100 51);
}
}
uj5u.com熱心網友回復:
“我在 int* ran1 和 int* ran2 之前收到了預期的錯誤識別符號”
C 編譯器錯誤訊息短語“預期的識別符號”出現在許多語法錯誤中,在各種編譯器中(甚至對于其他語言)。在這種情況下,編譯器會抱怨跟隨帶無型別變數的型別變數。這個
int level(lev, ran1, ran2, int* ran1, int* ran2){
^^^ untyped ^^^ ^^^^ typed ^^^^^^^^^
盡管它是一種過時的語法,并且今天很少使用,但您可以通過用括號將無型別的內容括起來來使編譯器靜音:
int level((lev, ran1, ran2), int* ran1, int* ran2){
(...感謝@Marcus Müller 在下面的評論中指出了這一點。)
順便說一句,并非所有引數都是完成您的代碼示例正在執行的操作所必需的。下面的代碼顯示了洗掉不需要的那些。
注意,當傳遞一個int要更新的指標時,它的值需要被更新,在這種情況下將是*ran1or *ran2, not ran1or ran2。
(*在此背景關系中使用的符號取消參考指標,在此示例中,取消參考的指標是要更新的值。)
此外,正如評論中所指出的,srand()只需要在程式會話期間呼叫一次,并且應該進行播種,以便如果程式的運行持續時間很短,并且可以快速連續呼叫,則會有一個每次呼叫的唯一種子值。
以下說明了您的代碼中的這些更正:
int level(int lev, int *ran1, int *ran2){//removed unused parameters
//srand(clock());//moved to main, so just called once
if(lev == 'l'){
*ran1=(rand()%10 1);//Updating value *ran1 not pointer ran1 (apply to all)
*ran2=(rand()%10 1);
}
if(lev == 'm'){
*ran1=(rand()%50 11);
*ran2=(rand()%50 11);
}
if(lev == 'h'){
*ran1=(rand()%100 51);
*ran2=(rand()%100 51);
}
return 0;//prototype requires a return statement
//alternatively, the prototype can be made void
//as 'level(...)' returns its work via its parameters.
}
int main(void)
{
//calling this only once per execution,
srand(GetTickCount());//number of milliseconds elapsed since system started,
int lev = 1, ran1, ran2;
level(lev, &ran1, &ran2);
return 0;//int main(void) requires a return statement
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/357593.html
上一篇:c中printf中的意外換行符
下一篇:為什么這里都跳過了“if”回圈?
