這是打印一個月提醒列表的程序。這是K.N.的一個例子。國王書。我的問題是我無法理解strcmp函數在這個程序中的工作原理。瞭解一個月提醒程序中的strcmp()函數
#include <stdio.h>
#include <string.h>
#define MAX_REMIND 50 /* Maximum number of reminders */
#define MSG_LEN 60 /* max length of reminders message */
int read_line(char str[], int n);
int main(void) {
char reminders[MAX_REMIND][MSG_LEN+3];
char day_str[3], msg_str[MSG_LEN+1];
int day, i, j, num_remind = 0;
for(;;) {
if(num_remind == MAX_REMIND) {
printf("--No space left--\n");
break;
}
printf("Enter day and reminder: ");
scanf("%2d", &day);
if(day == 0)
break;
sprintf(day_str, "%2d", day);
read_line(msg_str, MSG_LEN);
for(i = 0; i < num_remind; i++)
if(strcmp(day_str, reminders[i]) < 0)
break;
for(j = num_remind; j > i; j--)
strcpy(reminders[j], reminders[j - 1]);
strcpy(reminders[i], day_str);
strcat(reminders[i], msg_str);
num_remind++;
}
printf("\nDay Reminder\n");
for(i = 0; i < num_remind; i++)
printf(" %s\n", reminders[i]);
return 0;
}
int read_line(char str[], int n) {
int ch, i = 0;
while((ch = getchar()) != '\n')
if (i < n)
str[i++] = ch;
str[i] = '\0';
return i;
}
我的理解是,字符串存儲在二維數組中,其中每行都接受來自用戶的字符串。程序首先使用日期(來自用戶的小數點後兩位)並使用sprintf()函數將其轉換爲字符串。然後它將轉換後的字符串日期與存儲在提醒[] []數組中的字符串進行比較。
我不明白它如何比較日期和字符串。 (在這種情況下,它總是返回true,並且每次在i = 0時斷言)。
這不是這樣。這不是解釋代碼的正確論壇。我們應該把OP移到一個可以得到好專家建議的論壇上。代碼審查是由良好的C代碼編寫的,因此他可能在這裏得不到完美的答案。 – 2013-03-09 17:09:37