這個問題在這里已經有了答案: 如何正確比較 C 中的字串? (10 個回答) 6 小時前關閉。
是否可以在 do while 回圈陳述句中添加“是”,因為我無法弄清楚如何。它不作業。
#include <stdio.h>
int main ()
{
char choice [3];
do
{
printf ("Do you want to try again? ");
scanf ("%s", &choice);
} while (choice == "yes");
}
uj5u.com熱心網友回復:
該字串"yes"包含 4 個字符,包括終止零字符'\0'。因此,將接受字串的字符陣列應至少宣告為 4 個元素
char choice[4];
在這次呼吁中scanf
scanf ("%s", &choice);
第二個引數具有型別char( * )[3](或者char ( * )[4]如果您將更新陣列宣告,如上所示)而不是char *.
你至少應該寫
scanf ("%3s", choice);
在 do-while 陳述句的條件下
while (choice == "yes");
由于陣列隱式轉換為指向它們的第一個元素的指標,因此比較了兩個指標。因此,條件將始終評估為 false,因為陣列choice和字串文字"yes"占用不同的記憶體范圍。
例如,您需要使用strcmp在標頭中宣告的標準 C 函式<string.h>
#include <string.h>
//...
} while ( strcmp( choice, "yes" ) == 0 );
uj5u.com熱心網友回復:
可以做你正在嘗試的事情(回圈直到輸入“yes”),但是你的代碼有很多問題。首先,您選擇的緩沖區太小;它不能容納字串“yes”所需的四個位元組加上它的終止空字符(如果輸入超過兩個字符,您將超出它)。條件選擇 == yes 不是與緩沖區進行比較,而是將選擇的地址與指向字串文字的指標進行比較(打開編譯器警告)。使用 strcmp() 或類似方法來比較字串。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/520269.html
上一篇:大小為0的qsort未定義?
