我有這樣一段代碼,用于搜索檔案中的一個字串并顯示它。我怎樣才能編輯這段代碼,使其可以只搜索這個字串的一部分? 例如,檔案中包含作者 "dennis zill",如果我搜索 "zill",我希望代碼能顯示 "dennis zill"。
int searchauthor(FILE *ptr) //searching started
{
int save;
char de;
char in_name[30] 。
int flag = 1;
save = readbooks();
ptr = fopen("books info.txt", "r") 。
fflush(stdin)。
printf("
輸入作者的名字。")。)
gets(in_name)。
printf("-------------------------------------------------");
for(int i = 0; i < save; i ){
if(strcmpi(in_name, info[i].bauthor) == 0) {
printf("
書名:%s
價格:%u
可用的書的數量:%u
頁數:%u
-------------------------------------------------", info[i].bname, info[i].price, info[i].numavail, info[i].bpages);
flag = 0;
}
}
if (flag == 1){
printf("
沒有找到。
你想嘗試另一次搜索嗎[Y/N]?")。)
scanf("%c"/span>, &de)。
if(de == 'y' || de == 'Y'){
system("cls")。
in_name[MAX] = reset(in_name);
fclose(ptr)。
return 2;
}
else if(de == 'n'/span> || de == 'N'){
printf("
你將被重定向到主選單")。)
for(int k = 1; k <=5; k ){
Sleep(300)。
printf("。")。
}
system("cls")。
return 1;
}
printf("
你想嘗試另一個搜索[Y/N]嗎?")。)
scanf("%c"/span>, &de)。
if (de == 'y'/span> || de == 'Y') {
system("cls")。
in_name[MAX] = reset(in_name);
return 2; //return 2 to case 3 to search again。
}
else if (de == 'n'/span> || de == 'N') {
system("cls")。
printf("
你將被重定向到主選單")。)
for(int k = 1; k <=5; k ){
Sleep(300)。
printf("。")。
}
system("cls")。
return 1;
}
//搜索結束。
uj5u.com熱心網友回復:
問題是這一行:
if(strcmp>(in_name, info[i].bauthor) == 0){
它只有在完全匹配的情況下才會成功。
與其使用strcmp,不如使用strstr(或其不區分大小寫的變體strcasestr(),如果它可用)。
char *strstr(const char *haystack, const char *needle)。
haystack是完整的作者名字,needle是用戶的輸入。
函式在失敗時回傳NULL,所以只需檢查是否回傳了非NULL即可。
if(strstr(info[i].bauthor, in_name) != NULL){
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/307857.html
標籤:

