scanf 和 fgets 在同一个程序中
scanf and fgets in same program
void menu() {
int op;
printf("\n Choose a option from below : \n\n");
printf(" 1: Add Contact\n"
" 2: View A Contact\n"
" 3: View All Contacts\n"
" 4: View All Contacts With a Common First Character\n"
" 5: Delete All Contact\n"
" 6: Delete A Contact\n"
" 7: Replace A Contact Name\n"
" 8: Replace A Contact Number\n"
" 9: Refresh\n"
" 10: Exit\n\n");
printf(" Which one ? ");
fgets(op, 5, stdin);
switch ((int)op) {
case 1: addrecords(); break;
case 2: viewone(); break;
case 3: viewall(); break;
case 4: viewonechar(); break;
case 5: deleteall(); break;
case 6: deleteone(); break;
case 7: replaceone(); break;
case 8: replaceonenumber(); break;
case 9: refresh(); break;
case 10: exit(0); break;
default:
printf ("\n Wrong Option.\n\n");
menu();
break;
}
}
void addrecords() {
char name[50];
char number[20];
printf("\n\n Enter Contact Number (+880) : "); //Skips this
fgets(number, 20, stdin);
check(number);
printf(" Enter Contact Name : "); //Comes in here
fgets(name, 50, stdin);
fp = fopen("Phonebook.txt","a");
fprintf(fp, "%s %s\n", name, number);
fclose(fp);
printf("\n Contact Successfully Saved!\n Returning To Main Menu...\n\n");
menu();
}
void check(char n[20]) {
char name[25];
char ncheck[20];
fp = fopen("Phonebook.txt", "r");
fscanf(fp, "%s %s", name, ncheck);
while (!feof(fp)) {
if ((strcmp(ncheck, n)) == 0) {
printf ("\n Contact Already Exists.\n\n");
fclose(fp);
menu();
} else {
fscanf (fp, "%s %s", name, ncheck);
}
}
}
好的,我编辑了我的程序。输入 1 后,程序显示错误选项。但是我正在进入写一个。虽然我做的是对的,为什么程序显示错误的选项? fgets
有什么问题吗?现在有什么问题?
好吧,尽我所能尽量改变你的程序,不要指出其他错误或缺乏错误检查......并尽量保持它尽可能简单,以便你了解正在发生的事情,你需要什么要做的是替换:
switch ((int)op) {
类似
switch (atoi(op)) {
(或结合 fgets()
和 strtol()
或 sscanf()
创建您自己的 get_int()
)
void menu() {
int op;
printf("\n Choose a option from below : \n\n");
printf(" 1: Add Contact\n"
" 2: View A Contact\n"
" 3: View All Contacts\n"
" 4: View All Contacts With a Common First Character\n"
" 5: Delete All Contact\n"
" 6: Delete A Contact\n"
" 7: Replace A Contact Name\n"
" 8: Replace A Contact Number\n"
" 9: Refresh\n"
" 10: Exit\n\n");
printf(" Which one ? ");
fgets(op, 5, stdin);
switch ((int)op) {
case 1: addrecords(); break;
case 2: viewone(); break;
case 3: viewall(); break;
case 4: viewonechar(); break;
case 5: deleteall(); break;
case 6: deleteone(); break;
case 7: replaceone(); break;
case 8: replaceonenumber(); break;
case 9: refresh(); break;
case 10: exit(0); break;
default:
printf ("\n Wrong Option.\n\n");
menu();
break;
}
}
void addrecords() {
char name[50];
char number[20];
printf("\n\n Enter Contact Number (+880) : "); //Skips this
fgets(number, 20, stdin);
check(number);
printf(" Enter Contact Name : "); //Comes in here
fgets(name, 50, stdin);
fp = fopen("Phonebook.txt","a");
fprintf(fp, "%s %s\n", name, number);
fclose(fp);
printf("\n Contact Successfully Saved!\n Returning To Main Menu...\n\n");
menu();
}
void check(char n[20]) {
char name[25];
char ncheck[20];
fp = fopen("Phonebook.txt", "r");
fscanf(fp, "%s %s", name, ncheck);
while (!feof(fp)) {
if ((strcmp(ncheck, n)) == 0) {
printf ("\n Contact Already Exists.\n\n");
fclose(fp);
menu();
} else {
fscanf (fp, "%s %s", name, ncheck);
}
}
}
好的,我编辑了我的程序。输入 1 后,程序显示错误选项。但是我正在进入写一个。虽然我做的是对的,为什么程序显示错误的选项? fgets
有什么问题吗?现在有什么问题?
好吧,尽我所能尽量改变你的程序,不要指出其他错误或缺乏错误检查......并尽量保持它尽可能简单,以便你了解正在发生的事情,你需要什么要做的是替换:
switch ((int)op) {
类似
switch (atoi(op)) {
(或结合 fgets()
和 strtol()
或 sscanf()
创建您自己的 get_int()
)