7-34 通訊錄的錄入與顯示
題目
通訊錄中的一條記錄包含下述基本資訊:朋友的姓名、出生日期、性別、固定電話號碼、移動電話號碼。
本題要求撰寫程式,錄入N條記錄,并且根據要求顯示任意某條記錄。
輸入格式:
輸入在第一行給出正整數N(≤10);隨后N行,每行按照格式姓名 生日 性別 固話 手機給出一條記錄。其中姓名是不超過10個字符、不包含空格的非空字串;生日按yyyy/mm/dd的格式給出年月日;性別用M表示“男”、F表示“女”;固話和手機均為不超過15位的連續數字,前面有可能出現+。
在通訊錄記錄輸入完成后,最后一行給出正整數K,并且隨后給出K個整數,表示要查詢的記錄編號(從0到N?1順序編號)。數字間以空格分隔。
輸出格式:
對每一條要查詢的記錄編號,在一行中按照姓名 固話 手機 性別 生日的格式輸出該記錄。若要查詢的記錄不存在,則輸出Not Found。
輸入樣例:
3
Chris 1984/03/10 F +86181779452 13707010007
LaoLao 1967/11/30 F 057187951100 +8618618623333
QiaoLin 1980/01/01 M 84172333 10086
2 1 7
輸出樣例:
LaoLao 057187951100 +8618618623333 F 1967/11/30
Not Found
以下是我的代碼,但是只對了樣例,求大神指點
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct ifm{
char name[80];
char both[80];
char sex[10];
char dianhua[80];
char phone[80];
};
int main()
{
int n,i=0,num;
scanf("%d",&n);
while(getchar()!='\n')//處理scanf留下的換行符
continue;
struct ifm uct[n];
while(i<n)
{
scanf("%s",uct[i].name);
scanf("%s",uct[i].both);
scanf("%s",uct[i].sex);
scanf("%s",uct[i].dianhua);
scanf("%s",uct[i].phone);
while(getchar()!='\n')//處理scanf留下的換行符
continue;
i++;
}
scanf("%d",&num);
int a[num];
for(i=0;i<num;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<num;i++)//姓名 固話 手機 性別 生日
{
if(a[i]<n)
{
printf("%s %s %s %s %s",uct[a[i]].name,uct[a[i]].dianhua,uct[a[i]].phone,uct[a[i]].sex,uct[a[i]].both);
}
else
printf("Not Found");
if(i<num-1)
printf("\n");//換行 以pta的尿性,保險起見最后一行不打換行符
}
return 0;
}
uj5u.com熱心網友回復:
2 1 7輸出2條資料
分別是
下標1的資料(存在)
下標7的資料(不存在,只有 0,1,2)
結果是對的呀
uj5u.com熱心網友回復:
好像沒什么問題
uj5u.com熱心網友回復:
回復不了圖片,這是pat給的三個測驗點
0 sample 有查詢越界 答案正確
1 最長字串,最小N 答案錯誤
2 最大N,反復查詢同一記錄 答案錯誤
uj5u.com熱心網友回復:
我也覺得沒什么問題,但是他系統說我錯了兩個測驗點,想了好久我都快吐了
我決定跳過這題了
uj5u.com熱心網友回復:
問題是 輸入的順序錯了#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct ifm {
char name[80];
char both[80];
char sex[10];
char dianhua[80];
char phone[80];
};
int main()
{
int n,i, num;
scanf("%d", &n);
getchar();//吃掉回車
struct ifm *uct = (struct ifm*)malloc(sizeof(struct ifm)*n);
for (i=0;i < n; i++)
{
//姓名 生日 性別 固話 手機 --這個順序
scanf("%s %s %s %s %s",
uct[i].name, uct[i].both, uct[i].sex,uct[i].dianhua, uct[i].phone);
getchar();
}
scanf("%d", &num);
int *a= (int*)malloc(sizeof(int)*num);
for (i = 0; i < num; i++)
{
scanf("%d", &a[i]);
}
for (i = 0; i < num; i++)//姓名 固話 手機 性別 生日
{
if (a[i] < n)
{
printf("%s %s %s %s %s\n",
uct[a[i]].name, uct[a[i]].dianhua, uct[a[i]].phone, uct[a[i]].sex, uct[a[i]].both);
}
else
printf("Not Found\n");
}
free(uct);
free(a);
return 0;
}
輸出
3
Chris 1984/03/10 F +86181779452 13707010007
LaoLao 1967/11/30 F 057187951100 +8618618623333
QiaoLin 1980/01/01 M 84172333 10086
3 0 1 2
Chris +86181779452 13707010007 F 1984/03/10
LaoLao 057187951100 +8618618623333 F 1967/11/30
QiaoLin 84172333 10086 M 1980/01/01
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/156998.html
標籤:C語言
上一篇:如何讓doxygen生成的檔案可通過搜索某個注釋來搜索代碼
下一篇:求個領路人
