Scanf делает do_ while l oop застрял - PullRequest
0 голосов
/ 28 мая 2020

Я знаю, что код не будет работать (программа не завершена, я в самом начале создаю связанный список), но заметил кое-что странное.

#include <stdio.h>


struct mychar {
    char value;
    struct mychar *nextPtr;
};

typedef struct mychar Mychar;


void instructions();
void append(Mychar **, char );


int main(){
    instructions();

    Mychar *startPtr = NULL;

    unsigned int choice;
    do {
        scanf("%d",&choice);
        if (choice==1){
            char newchar;
            printf("\nWrite the character you want to add.");
            printf("\n> ");
            scanf("\n%c", &newchar);
            append(&startPtr, newchar);
        } else if (choice==2){

        } else {
            printf("\nError, try again.\n");
            //main();
            instructions();
        }
    } while (choice!=3);
    printf("\nEnd of run.\n");
}


void instructions(){
    printf("\nSelect operation. 1 to add, 2 to remove, 3 to exit.");
    printf("\n> ");
}


void append(Mychar **sPtr, char newvalue){
    Mychar *newlinkPtr = calloc (1, sizeof(Mychar));

    Mychar *previousPtr = NULL;
    Mychar *currentPtr = *sPtr;

    while(*sPtr!=NULL && newvalue > currentPtr->value){
        previousPtr = currentPtr;
        currentPtr = currentPtr->nextPtr;
    }

}

Вывод:

Select operation. 1 to add, 2 to remove, 3 to exit.
> 1

Write the character you want to add.
> a

Он застревает навсегда после того, как я напишу «а». Зачем?

РЕДАКТИРОВАТЬ: Думаю, я понял. Это для \n, который я вставил в scanf. Я обычно ставлю \n, чтобы избежать ошибок scanf. Но я, должно быть, не понимал, когда мне следует его использовать, а когда нет. Итак, теперь мой вопрос ... когда мне использовать \n или пространство внутри scanf?

...