Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在简单C程序中遇到问题_C_Scanf - Fatal编程技术网

在简单C程序中遇到问题

在简单C程序中遇到问题,c,scanf,C,Scanf,我对一个简单的C程序有问题。即使我输入1000到1999之间的年份,它仍然显示无效年份。请告诉我发生了什么事 #include <stdio.h> main() { int year; c: printf("\n\nEnter a Year: "); scanf("%d", year); if ((year < 1000) || (year > 1999)) { printf("\n\nInvalid Year"

我对一个简单的C程序有问题。即使我输入1000到1999之间的年份,它仍然显示无效年份。请告诉我发生了什么事

#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);
}
#包括
main()
{
国际年;
c:
printf(“\n\n输入年份:”);
scanf(“%d”,年份);
如果((年份<1000)| |(年份>1999))
{
printf(“\n\n无效年份”);
后藤c;
}
换算(年);
}
换算(整数年)
{
printf(“%d”,年份);
}

您需要将地址传递给
scanf
,即:

scanf("%d", &year);

注意符号和。

在scanf中,其他参数应为指针
应该是

  scanf("%d", &year);

亚当·扎克曼打败了我,用
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);
  }
}
main(){
国际年;
printf(“\n\n输入年份:”);
scanf(“%d”和“年”);
而((年份<1000)| |(年份>1999)){
printf(“\n\n无效年份”);
printf(“\n\n输入年份:”);
scanf(“%d”和“年”);
}
}

更好的构造是使用do{}while()构造,但我将把它留给您作为练习:)

我花了一秒钟才意识到
c:
不是打字错误……我建议不要使用
goto
语句。相反,使用循环构造。+1表示“每个人都说我不应该使用
goto
,但我无论如何都会这样做,`pizazz.where use
printf()务必在你要显示的文本末尾添加一个<代码> \n>代码。如果你不知道,由于OS行缓冲I/O系统,你可能看不到期望的输出。现在我们有一个循环开始检查,最后循环检查。我们需要一个中间的检查。@费尔南德斯。中断;