Я знаю, что код не будет работать (программа не завершена, я в самом начале создаю связанный список), но заметил кое-что странное.
#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
?