我不曉得在這篇PO恰當與否
#這不是回家作業
#當然也不是考試

因為系上學的程式語言只有Labview
同系的都應該知道(麻煩出聲幫我背書〒△〒)

程式碼在這裡↓
#include <stdlib.h>
#include <stdio.h>
typedef struct FRIEND
{
char name[10];
char fone[15];
char birth[15];
}FR;
FR enternew(void);
void show(FR[],int);
int main(void)
{
char ch;
int size=0,i;
FR f[20];
while(1)
{
printf("請問您要 1)輸出好友名單 2)新增好友資料 3)離開");
scanf("%s",&ch);
switch(ch)
{
case'1':if(size!=0)
{
show(f,size);
}
else
{
printf("目前尚無會員資料");
};
break;
case'2':if(size>=20)
{
printf("名單已滿");
}
else
{
enternew();
size++;
for(i=0;i<size;i++)
{
printf("%s",f[i]);
}
}
break;
case'3':break;
}
fflush(stdin);
}
system("pause");
return 0;
}
FR enternew(void)
{
FR temp;
printf("請輸入姓名");
scanf("%s",temp.name);
//getchar();
printf("請輸入電話");
scanf("%s",temp.fone);
//getchar();
printf("請輸入生日");
scanf("%s",temp.birth);
//getchar();
return temp;
}
void show(FR f[],int size)
{
int i;
for(i=0;i<size;i++)
{
printf("=============================\n");
printf("%10s 的生日: %-15s\n",f[i].name,f[i].birth);
printf("%10s 的電話: %-15s\n",f[i].name,f[i].fone);
}
}


網頁版在這裡:

我想要問的是為什麼input資料後
printf()出來是(null)
因為自己學比較沒有系統
所以上來發問
要鞭麻煩小力一點o(><;)o o

我在想或許是結構傳遞錯誤
尤其是scanf("%s",temp.xxxx);
和printf("%10s 的生日: %-15s\n",f[i].xxxx,f[i].xxxx);這邊

但因為陣列/指標沒學好......所以T___T
by笨丘

共 7 則回應

2
我會建議你改變一下作法,
把 'enternew()' 和 'show( FR[], int )' 這兩個 function prototype,
改寫成 'FR' 這個structure 的 member function.

另一種作法, 你應該改寫 'enterner()' 這個function, 改成傳入 'FR' 的 reference (也就是傳參考), 原因可以看看我下面寫的, 有沒有點出你程式真正出問題的地方.

我沒有太仔細幫你檢查程式.
不過大概看了一下,

"
case'2':
if(size>=20)
{
printf("名單已滿");
}
else
{
enternew();
size++;
(後略)
"

這一段, 你是不是其實沒有動到你要更動內容的 'FR f' ?
0
喔喔@@看到了.....
所以應該用一個f[ ]=enternew( );
這樣才對嗎?
0
剛剛把enternew( )的資料傳入f陣列中成功了
而且enternew( )保留為enternew(void)(因為看起來不用傳入數值?)
港動o( ‧ " ‧ )o
另外能否請教一下
假設f[20]
這樣算3*20(60)維陣列嗎?
因為f[ ]中還有3項子資料,分別為name、fone、birth


非常感謝您!!!
0

這樣講其實不太對喔,
"structure" 和 "array"' 的概念是不太一樣的.
0
果然沒學好惹ˊ_>ˋ
可以請您說得說詳細一點嗎@@
1
印象中 scanf 跟 printf 都只支援 ASCII 編碼喔
給他輸入/出中文(utf-8)不知道會怎樣欸

要輸入/輸出中文的話建議改用 C++ 的 wcin 跟 wcout

順手查了一下
這邊有說怎麼處理 utf-8 懶得幫你整理了自己看看ㄅ

然後看你在下面的問題...請不要把 struct 跟 array 當成一樣的東西.
它們本質上是有點類似沒錯, 都是連續的資料區段.
但是 struct 的用途在於 "包裝", 就是把好幾個 "可以是不同型別" 的參數包成一包來用,
主要用意是增加程式的可讀性. 就像你看你定義的 FR.name FR.birth FR.fone 就能知道那資料代表啥意思.
假設你把它寫成 array ....FR[0], FR[1], FR[2] ...
哪天這個程式要換人維護, 我會建議你趕快跑路, 因為你的接手人會開始追殺你.
array 的話, 主要是用在有一批需要方便存取的 "同型別的資料" . 你的 FR f[20]; 有那些好處你自己應該不會不清楚.
相信你也不會有想把那個 array 寫成 struct 的打算.

啊還有...FR[0] 這樣是會出現 compile error 的, 不要試著把已宣告的 struct 當 array 用
0
你文中的問題看出來了((昨天覺得太亂沒認真看
離發問時間過這麼久了不知道你自己有沒有發現...

case '2' 裡面的 printf("%s",f[i]); -> 這怎麼可能會對啊~~~
f[i] 是你自己定義的 struct FR,
你這樣寫是要 printf 何去何從...人家只能印出基本型別好嗎...
把那個 for 迴圈換成 show 函式就好了吧...
馬上回應搶第 8 樓...
回應...