fgets不会在循环C中第二次扫描

时间:2014-04-10 22:49:37

标签: c loops while-loop scanf fgets

所以我让这个程序扫描一个地址,然后询问uesr是否要插入另一个或打印已插入的地址。当我运行它时,我会经历它一次然后我插入的& y它打印一个随机数然后再打印带有注释的行并扫描& y。我觉得它通过do-while循环第二次跳过fgets函数。救命啊!

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>



int main (void)
{

    char address[10][100];
        int x;
    char y;

    for(x=0;x<10;x++){
         do {
           printf("Enter address %d:", x + 1); //prints this second time through

           fgets(address[x], 100, stdin); //doesnt scan for this second time through

           printf("Do you want to print address's inserted thus far or continue?(p or c):"); // prints this second time through also. 

            scanf("%d" , &y);

            if (y == "c") continue;

            else

               printf("%d" , &y);
               break;

    } while (strcmp(address[x], "\n") == 0);
}















return(0);  
}

2 个答案:

答案 0 :(得分:0)

fgets()保存输入的换行符,并添加NULL字符 例如,尝试将值100改为99,以便腾出一些空间。

如果您的输入(包括换行符)超过99个字符,则需要通过读取虚拟字符来“刷新”输入,直到达到换行符。

答案 1 :(得分:0)

您的代码:

        if (y == "c") continue;

        else

           printf("%d" , &y);
           break;

错误缩进。 break; 是在printf()之后(而不是continue;之后)执行的,但从技术上讲,代码相当于:

        if (y == "c")
            continue;
        else
            printf("%d" , &y);
        break;

但是,您的主要问题是scanf("%d", &y);会在输入流中保留换行符,因此下一个fgets()会读取换行符并停止。此外,由于ychar,您应该使用scanf("%c", &y);来读取值,并使用if (y == 'c')来比较它。