函數如下,輸入形式“1 2 3 1 2 3 1 3”,要求分辨輸入的每個字符,如果是數字則在鏈表上新建一個節點,并將其作為節點的值。但是調用該函數,然后引用鏈表的值卻老提示內存不可寫,請問這函數哪里錯了?void init(page * head){ char c;page * h=head;cout<<"輸入頁面號的引用串的序列:";while((c=cin.get())!='\n'){ if(c>='0'&&c<='9'){h=new page;h->i=int(c-48);h=h->next;}}h=null;return;}機構體得定義:typedef struct Page{int i;struct Page * next;}page;
2 回答

慕慕森
TA貢獻1856條經驗 獲得超17個贊
cin.get()是用來讀取多余回車符號的。
保留cin.get()的時候,程序執行流程如下:
你輸入的google+回車,被getline(cin, titles[i])讀掉,然后你輸入的10被cin >> ratings[i]讀掉,10后面的回車被cin.get()讀掉。然后正常進入下一次循環。
去掉cin.get()之后,流程如下:
google+回車,被getline讀取。10被cin >> ratings[i]讀取。10后面的回車,被下次循環里的getline()讀取,從這里開始就出錯了。

斯蒂芬大帝
TA貢獻1827條經驗 獲得超8個贊
void init(page *& head)
{
char c;
page * h=head;
if (null == h) {
h = new page;
head = h;
}
cout<<"輸入頁面號的引用串的序列:";
while((c=cin.get())!='\n')
{
if(c>='0'&&c<='9')
{
h->next = new page;
h = h->next;
h->i = int(c-48);
}
}
h->next = null;
return;
}
添加回答
舉報
0/150
提交
取消