用scanf函数运行for循环的正确方法是什么

时间:2018-07-11 04:26:21

标签: c printf scanf c11

我刚刚开始学习c。我这里有一个代码,可以接受用户的输入并进行打印。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a[5];
    int i ;

    for(i=0;i<5;i++)
    {
         printf("enter the %d position no: ",i+1);
         scanf("%d \n",&a[i]);
    }

    for(i = 0;i<5;i++)
        printf("position %d : %d \n",i+1,a[i]);

}

这是我的输出控制台。

enter image description here

但是输出给出了令人误解的结果。 在scanf变红的第2行,它没有显示字符串“输入%d位置”,而是直接要求输入值。

3 个答案:

答案 0 :(得分:2)

您的scanf不需要空格和换行符,只需"%d"

for(i=0; i<5; i++)
{
     printf("enter the %d position no: ",i+1);
     scanf("%d",&a[i]);
}

答案 1 :(得分:2)

快速解决问题的方法:scanf("%d \n",&a[i])-> scanf("%d",&a[i])

此外,请记住始终检查scanf是否有错误。可以这样完成:

if(scanf("%d", &a[i]) < 0) {
    // Print error message and/or exit or whatever you want to do
} else {
    // Do something else
}

从长远来看:

花一些时间研究C语言中的输入法。它们有些棘手,并且存在数百万的陷阱。简而言之,scanf提供的一个很好的选择,因为输入的格式与您期望的完全相同。这使它成为用户输入的错误选择,因为用户非常难以预测。

这里是一个值得阅读的链接:

http://www.giannistsakiris.com/2008/02/07/scanf-and-why-you-should-avoid-using-it/

答案 2 :(得分:0)

您可以如下使用:

for(i=0;i<5;i++)
{
   printf("enter the %d position on : ",i+1);
   scanf("%d",&a[i]);
   printf("\n");
}