迭代错误

时间:2017-07-14 05:00:01

标签: c for-loop

int age, i;
char name[10], address[10]; 
for( i=0; i<3; i++ )
{
     printf("Enter your name: ");
     gets(name);
     printf("Where do you live?");
     gets(address);
     printf("What's your age? ");
     scanf("%d", &age);
 }

在代码的第二次迭代中,执行会跳过“输入您的姓名:”部分。为什么呢?

2 个答案:

答案 0 :(得分:0)

在进入年龄结束时有一个换行符。

我建议您使用fgets()代替gets(),并在扫描age

后删除换行符

在阅读年龄后,通过在\n之后放置一个空格来消耗%d个字符。

scanf("%d ",&age);

fgets(name, sizeof(name), stdin);
size_t n = strlen(name);

if(n>0 && name[n-1] == '\n')
{
   name[n-1] = '\0';
}

P.S :: fgets()末尾有一个换行符,所以你需要摆脱它。

答案 1 :(得分:0)

更改

scanf("%d", &age);

scanf("%d ", &age);

这样它就会读取空白区域(新行)。

如评论中所述,摆脱gets

检查scanf

的返回值