2011-11-18 96 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