所以我制作了这个程序来扫描地址,然后询问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()
读取换行符并停止。此外,由于y
是char
,因此应该使用scanf("%c", &y);
读取值,使用if (y == 'c')
进行比较