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