簡體   English   中英

Printf語句未按順序打印

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM