[英]Printf statments not printing in order
typedef struct node_s{
int data;
struct node_s *next;
}node_t;
void insert(node_t *pointer, int data){
while(pointer->next != NULL){
pointer = pointer->next;
}
pointer->next = (node_t *)malloc(sizeof(node_t));
pointer = pointer->next;
pointer->data = data;
printf("Elemnet inserted\n"); //2. Followed by this statment once done.
pointer->next = NULL;
}
int main(){
node_t *start, *temp;
start = (node_t *)malloc(sizeof(node_t));
temp = start;
temp->next = NULL;
printf("1. Insert\n");
printf("2. Delete\n");
printf("3. Print\n");
printf("4. Find\n");
while(1){
int input;
scanf("%d\n", &input);
if(input==1){
int data;
printf("Input data\n");//1. I want this to print out first once I give 1 input.
fflush(stdout);
scanf("%d", &data);
insert(start, data);
}
}
在編譯和執行時,我可以提供輸入,但是printf語句的順序不是順序的。 例如,這就是我輸入並輸入數據后如何獲得輸出的方法。
sh-4.1$ ./linked_list
1. Insert
2. Delete
3. Print
4. Find
1
23
Input data
Elemnet inserted
1
45
Input data
Elemnet inserted
我也嘗試在printf語句之后添加fflush(stdout)。
從第一個scanf
刪除\\n
scanf("%d\n", &input);
\\n
在那做什么? 這就是導致您的scanf
“徘徊”,等待額外的輸入,而不是立即終止的原因。
\\n
對於scanf
具有特殊含義。 當您在scanf
格式說明符中使用空格字符(空格,制表符或\\n
)時,您明確要求scanf
跳過所有空格。 如果在scanf
格式字符串的末尾使用了此類字符,則在讀取實際數據后scanf
將繼續等待輸入,直到遇到非空白字符為止。 這正是您的情況。
除了從scanf
語句中刪除\\n
,請注意scanf
將從命令行讀取數據,填充指定的變量, 但它將\\n
留在輸入緩沖區中,從而在下次調用scanf
引起問題。 由於沒有刷新輸入緩沖區的標准命令,因此您有責任確保下次調用scanf
,輸入緩沖區中沒有多余的未使用字符。 如果只使用getchar()
讀取輸入緩沖區中的所有剩余字符,直到遇到\\n
則一種簡單的方法是在每次scanf
之后手動刷新輸入緩沖區。 例如:
int c;
...
scanf ("format", &var);
do {
c = getchar();
while ( c != '\n' );
這將確保隨后對scanf
調用檢索所需的數據,而不是傳遞保留在輸入緩沖區中的字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.