使用while循环计算输入量。C

使用while循环计算输入量。C,c,loops,while-loop,eof,C,Loops,While Loop,Eof,作为程序的开始,我使用do while循环来计算用户输入的输入量。do while循环应在输入EOF(Ctrl+D)后结束。 然而,我的问题是,当我输入1个值,然后按Ctrl+D时,我的程序说它已经计算了两个输入,而我希望它只有一个 #include <stdio.h> main() { int n=0; printf("Enter values.\n"); do { n++; } while (EOF!=scanf("%d",&n)); pri

作为程序的开始,我使用
do while
循环来计算用户输入的输入量。
do while
循环应在输入
EOF
(Ctrl+D)后结束。 然而,我的问题是,当我输入1个值,然后按Ctrl+D时,我的程序说它已经计算了两个输入,而我希望它只有一个

#include <stdio.h>

main()
{
   int n=0;

printf("Enter values.\n");

do {
    n++;
   }
while (EOF!=scanf("%d",&n));


printf("%d\n",n);

}
#包括
main()
{
int n=0;
printf(“输入值。\n”);
做{
n++;
}
而(EOF!=scanf(“%d”、&n));
printf(“%d\n”,n);
}
如果我编译程序并运行它,然后输入1,然后按enter键并输入Ctrl+D,它会显示
n=2
。为什么会这样?我只输入了1个值

  • 执行
    n++
    <代码>n变为1
  • scanf(“%d”和&n)
    被执行。读取输入
    1
  • 执行
    n++
    <代码>n变为2
  • scanf(“%d”和&n)
    被执行。它返回
    EOF
    并从循环中断
  • 结果,结果变为2。在这种情况下,我认为你应该
    while
    语句而不是
    do
    语句。另外,不要用
    scanf()
    破坏计数器

    #包括
    内部主(空)
    {
    int n=0,m;
    printf(“输入值。\n”);
    而(1==scanf(“%d”、&m))
    {
    n++;
    }
    printf(“%d\n”,n);
    返回0;
    }
    
    因为它是do..while循环<代码>n++将在读取Ctrl+D之前执行。最简单的解决方案,更改为while循环
    #include <stdio.h>
    
    int main(void)
    {
       int n=0, m;
    
        printf("Enter values.\n");
    
        while (1==scanf("%d", &m))
        {
            n++;
        }
    
        printf("%d\n",n);
    
        return 0;
    }