各位大大,請求幫忙。
題目是:使用陣列收尋,查輸入n是否與a[]相同,如相同印出相對印位置的數字。
我的問題在:我查找到a[0],卻無法正確顯示b[0]的值?
是我哪裡有寫錯嗎?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main(void) {
char *a[3] = {"大雄","宜靜","技安"};
char *b[3] = {"093656","078885","065275"};
char n[] = "";
int i;
while(1) {
puts("enter name:");
scanf ("%s", &n);
for (i = 0; i < 3; i++) {
if(strcmp(n,a[i]) == 0) {printf ("%s\n", b[i]); break;}
}
if (i == 3) printf ("查無此人\n");
}
}
我得到的結果 ↓ 只有b[0]大雄會不正常結束
備註:
我發現將這句的內文修改一下就能正常執行但並不是我要的結果↓if(strcmp(n,a[i]) == 0) {printf ("%s\n", b[i]);}
將b[i]改成a[i] ---> 可正常執行,並印出"大雄"
將%s改成%p ---> 也能正常執行,並印出"位址"
如將內文修改一下,也能正常執行 ↓
char *a[3] = {"大雄","宜靜","技安"};
int b[3] = {"93656","78885","65275"};
→但大雄出來的結果還是怪怪的,不是93656是11515498,且b[0]的初始值怎麼改都不會變
而將內文修改一下,忽略掉[0]這個索引就能正常執行 ↓
char *a[4] = {"","大雄","宜靜","技安"};
char *b[4] = {"","093656","078885","065275"};
→但這樣本質問題依然沒有解決
另外在a[0]放上1個字元,b[0]跑出來的結果有時會出現 [字元q 、 亂碼 、 直接結束]
char *a[4] = {"q","大雄","宜靜","技安"};
char *b[4] = {"0900","093656","078885","065275"};
==回覆.海綿寶寶==
可以用!! 謝謝大神幫忙解惑。 (新手訓練期無法使用回應)
但為什麼一維陣列不能?? 是因為儲存空間的關係??
字串是由字元所構成的,所以要由二維陣列建立一個空間及每個字的長度位置。
但我使用了字元指標,系統應該會建立一個空間儲存該字串。
剛測試了一下,好像跟要輸入的空字串有關係,是因為沒有設定空間大小,造成系統預設值的空間不足,而產生不正常結束?
char n[] = "";
但令人好奇的是,為什麼就只有b[0]有問題,b[1]~b[n]都沒問題...
又是一個要細細思考的問題了 ! " !
以下提供參考
看看可不可用
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LENGTH 100
void main(void) {
char a[3][MAX_LENGTH] = {"大雄","宜靜","技安"};
char b[3][MAX_LENGTH] = {"093656","078885","065275"};
char n[MAX_LENGTH] = "";
int i;
while(1) {
puts("enter name:");
scanf ("%s", &n);
for (i = 0; i < 3; i++) {
if(strcmp(n,a[i]) == 0) {printf ("%s\n", b[i]); break;}
}
if (i == 3) printf ("查無此人\n");
}
}
你的「一維陣列」叫「字元」陣列
最多只能放一個字串
如這篇裡面所說
而不管是「字元」陣列或「字串」陣列
都要註明「陣列大小」讓程式知道要「保留多少記憶體空間」
用char n[]="";
的寫法
編譯時不會出錯
但在執行時(scanf)你不知道會寫到那一段的記憶體
通常會造成「莫名其妙」(只有b[0]才會錯)的錯誤
了解!!謝謝大神講解。