我是一個菜鳥程式員,試圖在 VS 代碼上運行一個簡單的代碼。
#include<stdio.h>
int main()
{
char* a;
printf("Enter a char");
scanf("%s",&a);
if (a = "yes")
{
printf("Number is 30");
}
else if (a = "no")
{
printf("Number is 50");
}
else{
printf("oops");
}
return 0;
}
我想看看代碼你們可以弄清楚我要做什么,如果用戶輸入“是”,則需要顯示特定的句子,“否”也是如此。這里的問題是無論我在輸入中寫什么,它都會列印第一條陳述句,“Number is 30”。我試過運行類似的代碼,但最終得到相同的輸出。
如果可能,請向我解釋如何使用帶有 if-else 陳述句的字符、字串、陣列。
uj5u.com熱心網友回復:
發布的代碼中有幾個誤解。
首先是對charvs的誤解string。一個char是例如一個字母,一個特殊字符一樣.,;等(見注1),而字串是字符的系列。所以
'y' is a char
"yes" is a string
您列印“輸入一個字符”,但從代碼中可以明顯看出您確實想要“輸入一個字串”。
這會導致下一個問題。要使用輸入字串,scanf您需要傳遞一個“指向字符的指標”。由于&. 此外,傳遞的指標必須指向某個記憶體。所以你需要:
char a[10]; // Make it an array of char so that it can hold a string
printf("Enter a string, max 9 characters");
scanf("%9s", a); // No & before a and width specifier used to avoid buffer overflow
現在這部分
if (a = "yes")
不是在 C 中比較兩個字串的方法。為此,您需要該函式strcmp- 例如:
if (strcmp(a, "yes") == 0)
把它放在一起就像:
int main()
{
char a[10];
printf("Enter a string, max 9 characters");
scanf("%9s", a);
if (strcmp(a, "yes") == 0){
printf("Number is 30");
}
else if (strcmp(a, "no") == 0)
{
printf("Number is 50");
}
else
{
printf("oops");
}
return 0;
}
也就是說,我不明白你為什么要列印諸如“數字是 30”之類的東西,但這在這里無關緊要。
注1:型別char實際上是整數型別,即數字,但常見的用途是使用ASCII編碼將這些數字映射為字符。
uj5u.com熱心網友回復:
有多種方法可以初始化變數以訪問 C 字串。
char *char_ptr = "Hello";
這會將 char_ptr 初始化為指向只讀字串“Look Here”的第一個字符。無法修改通過字符指標初始化的 AC 字串。當以這種方式初始化 C 字串時,嘗試修改由 char_ptr 指向的任何字符是未定義的行為。未定義行為意味著當編譯器遇到任何觸發未定義行為的事情時,它被允許做任何看起來合適的事情。
定義可以修改的字串的更方便的方法是使用:
char str[];
這樣你就可以修改C字串中的任何字符
ps 你還需要在 if 陳述句中使用 strcmp()
uj5u.com熱心網友回復:
您可以使用 C 中的字串輸入
scanf(“%s”, str);
并比較您需要使用的字串:
strcmp(str1, "yes");
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/364030.html
下一篇:這個簡單的程式有問題
