簡體   English   中英

C scanf第二次跳過

[英]C scanf skipping second time

我已經讀過有關在scanf前面放置空格的信息,但是我嘗試的所有方法均無效。 我試圖讀取兩組三個整數。 第一個scanf可以正常工作,而第二個則不能。 我很沮喪,因為我嘗試在論壇中看到的所有內容都在空格或換行符前加了空格,但沒有任何效果。

有問題的代碼:

// Get user input for the two dates:
printf("Enter Date #1 in format mm:dd:yyyy \n");
scanf("%i:%i:%i\n", &D1.month, &D1.day, &D1.year);

printf("Enter Date #2 in format mm:dd:yyyy\n");
scanf("%i:%i:%i", &D2.month, &D2.day, &D2.year);

我試圖將空格和換行符分開放置在一起,試圖讀取一個虛擬變量字符以查看是否可行。 為什么在第二個scanf中不能輸入任何數據?

輸出顯示為:

Enter Date #1 in format mm:dd:yyyy 
09:06:1995
Enter Date #2 in format mm:dd:yyyy
The number of days between 0:1529117256:94769206 and 9:6:1995 is -1783102426

我發表了一篇新文章,因為我看到了有關字符而不是整數的解釋。

當您將%iscanf

scanf("%i",&inp);  //INPUT 09 AS MONTH OR ANYTHING

輸入為09 ,它將以前綴0或前導零作為八進制輸入,因此inp的值將無效,因為9不是有效的八進制數字,八進制數字為0,1,2,3,4,5,6,7

就像使用%d時一樣,輸入09不會轉換為八進制 ,讀取的值為9

除此之外,我還想提出一些建議: 遠離scanf

如user3121023的注釋(1)所述,將兩者都更改為“%d”而不是“%i”修復了該問題。 我不清楚為什么。

現在的代碼是:

// Get user input for the two dates:
printf("Enter Date #1 in format mm:dd:yyyy \n");
scanf("%d:%d:%d", &D1.month, &D1.day, &D1.year);

printf("Enter Date #2 in format mm:dd:yyyy\n");
scanf("%d:%d:%d", &D2.month, &D2.day, &D2.year);

此外:

"%d:%d:%d\n"

將無法正常工作。 不要在您的scanf中輸入'\\ n'。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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