Scanf хранит значение слишком долго, а второе значение, которое он читает, сохраняет дважды? - PullRequest
0 голосов
/ 27 марта 2020

Хорошо, у меня есть программа, которая считывает контактную информацию из пользовательского ввода, вот функция, которая получает имена контактов.

// getName:
void getName(struct Name* name)
{
    //First name
    printf("Please enter the contact’s first name: ");
    scanf("%[^\n]31s", name->firstName);

    clearKeyboard();

    //Middle Name
    printf("Do you want to enter a middle initial(s)? (y or n): ");
    if (yes()) {
        printf("Please enter the contact’s middle initial(s): ");
        scanf("%[^\n]7s", name->middleInitial);
    }

    clearKeyboard();

    //Last Name
    printf("Please enter the contact’s last name: ");
    scanf("%[^\n]36s", name->lastName);

    clearKeyboard();
}

После получения информации о контакте я отображаю информацию и что-то не кажется правильным.

Что ожидается

Name: Tom See John|How Wo|Song Sing

Что выводится

Name: Tom See John|How Won|Song Sing Song Sing

и вот объявления для этой структуры имени также.

// Structure type Name declaration
struct Name {
    char firstName[31];
    char middleInitial[7];
    char lastName[36];
};

Я предполагаю, что мой синтаксис scanf неверен, в результате чего scanf не помещает разделитель в конец строки middleInitial, что приводит к некоторой ошибке, из-за которой lastName печатается дважды.

I ' В течение последнего дня я возился с этим кодом, не могу понять ...

Я новичок в c программировании, и любая помощь или критика приветствуются, я открыт для всего!

...