Do while循环总是在第一次循环后退出

时间:2017-09-27 07:30:06

标签: c loops scanf

我试图在C中制作一个小型地址簿程序,用户可以在其中输入存储在文本文件中的联系信息。如果用户选择添加新联系人,程序应该询问他们是否要在他们完成后添加另一个联系人。我做了一个if语句,我相信如果他们进入' n'如果他们写任何其他内容,或继续其他联系。但是,如果用户键入' y' (或其他任何东西)它总是在1循环后退出。

void new_contact(void){
    printf("Ready for new contact\n");
    int enter_new_contact = 1;
    char first_name[15];
    char second_name[20];
    char phone_number[12];
    char email[50];
    char y_n[1];
    do{
        printf("Enter the contacts first name.\n");
        scanf("%s", first_name);

        printf("Enter the contacts second name.\n");
        scanf("%s", second_name);

        printf("Enter the contacts phone number.\n");
        scanf("%s", phone_number);

        printf("Enter the contacts email.\n");
        scanf("%s", email);

        printf("%s\t%s\t%s\t%s\n", first_name, second_name, phone_number, email);

        printf("Would you like to add another contact?\n");
        scanf("%s", y_n);
        printf("%s\n", y_n);

        if(strcmp(y_n, "n")==0){
            enter_new_contact=0;
        }

    }while(enter_new_contact==1);
}

提前致谢!

1 个答案:

答案 0 :(得分:4)

scanf("%s", y_n);

当scanf()尝试将'\0'放入y_n时,您在此处有未定义的行为,您只分配了一个字符。您应该将其声明为

char y_n[2];

并将scanf语句更改为

scanf("%1s", y_n);