2011-11-18 95 views
3

我遇到了一個簡單的C程序問題。即使我在1000到1999年之間進入一年,它仍然顯示無效年份。請告訴我發生了什麼?在SImple C程序中遇到問題

#include <stdio.h> 

main() 
{ 
    int year; 
c: 
    printf("\n\nEnter a Year: "); 
    scanf("%d", year); 

    if ((year < 1000) || (year > 1999)) 
    { 
     printf("\n\nInvalid Year"); 
     goto c; 
    } 
    convert(year); 

} 
convert(int year) 
{ 
    printf("%d", year); 
} 
+2

花了我一秒鐘才意識到'c:'不是錯字... – Jacob

+3

我會推薦*不*使用'goto'語句。相反,使用循環結構。 –

+1

轉到!! heheh :) – duedl0r

回答

7

您需要的地址傳遞給scanf,即:

scanf("%d", &year); 

注意的符號。

+0

oops !!這樣一個愚蠢的錯誤 – shr3jn

2

在scanf函數,其他參數應該是指針
應該

scanf("%d", &year); 
1

亞當Zalcman打我給它,使用 scanf("%d", &year),並儘量避免goto語句。 while循環用以下方式替換它:

main() { 
    int year; 
    printf("\n\nEnter a Year: "); 
    scanf("%d", &year); 

    while((year < 1000) || (year > 1999)) { 
    printf("\n\nInvalid Year"); 
    printf("\n\nEnter a Year: "); 
    scanf("%d", &year); 
    } 
} 

一個更好的建設將使用禁止{}而()建設,但我把它留給您作爲一個練習:)

+0

現在我們有循環檢查在開始並在最後循環檢查,我們需要一個在中間檢查。 –

+3

@ R.馬丁尼費爾南德斯你的意思是如果(某事)中斷;'? – Yuri