fgets在循环C时不进行第二次扫描



所以我制作了这个程序来扫描地址,然后询问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);  
}

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

如果您的输入(包括换行符)超过99个字符,那么您需要通过读取伪字符来"刷新"输入,直到到达换行符为止。

您的代码:

        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')进行比较

相关内容

  • 没有找到相关文章

最新更新