第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

簡單C++問題,關于goto語句的錯誤用法?

簡單C++問題,關于goto語句的錯誤用法?

繁星點點滴滴 2019-02-21 19:15:28
如下程序:#include<iostream>#include<cstdlib>using namespace std;int main(){cout<<"Compute a random number?(y/n)";char ans;cin>>ans;if(ans=='n')goto done;int ran=rand();done:return 0;}為什么將語句:int ran=rand();改成:int ran; ran=rand();就對了?書中解釋為:一個需要初始化的變量,只要它在作用域內(nèi),就必須保證已經(jīng)對其進行過初始化了。怎樣理解這句話,修改前后的句子有什么不同?何謂初始化?謝謝回答!
查看完整描述

3 回答

?
小怪獸愛吃肉

TA貢獻1852條經(jīng)驗 獲得超1個贊

int ran;
ran=rand();
不是初始化,它是聲明與賦值語句。

int ran=rand(); 聲明 時就 給定數(shù)值,叫初始化。

if(ans=='n') goto done; 轉(zhuǎn)向語句不允許 跳過一個 同一層的 含 初始化 的區(qū)域。

轉(zhuǎn)向語句只允許轉(zhuǎn)向它的同層或外層。如果你把初始化部分用花括號括起來,讓它成為一個內(nèi)層,就允許了:
if(ans=='n') goto done;
{ int ran=rand(); };
done: return 0;

查看完整回答
反對 回復 2019-03-26
?
蕭十郎

TA貢獻1815條經(jīng)驗 獲得超13個贊

這個基本上可以視為編譯器bug, intel編譯器也有這種問題,而微軟編譯器就沒有。

如果goto跳過的代碼含有初始化就會視為錯誤,即便這個變量在這種情形下根本不會被使用。這么做是毫無意義的...

int i = 0;這就是初始化,在聲明的時候用=賦予初始值。修改前后生成的代碼沒有區(qū)別。

查看完整回答
反對 回復 2019-03-26
?
慕后森

TA貢獻1802條經(jīng)驗 獲得超5個贊

你把那個goto語句去掉試一下,如果沒有問題的話
就應該是編譯器不知道程序應該怎么樣處理的這樣問題
因為前面有一個跳轉(zhuǎn)語句,編譯器不知道是否應該給后面的變量ran進行初始化

查看完整回答
反對 回復 2019-03-26
  • 3 回答
  • 0 關注
  • 949 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號