int main()
{
char firstdate[10];
char seconddate[10];
printf("Enter the First Date in this format:DD/MM/YYYY\n");
fgets(firstdate , 11 , stdin);
printf("Check: %s\n" , firstdate);
printf("Enter the second Date in this format:DD/MM/YYYY\n");
fgets(seconddate , 11 , stdin);
printf("Check: %s\n" , seconddate);
printf("second Check: %s\n" , firstdate);
printf("second Check: %s\n" , seconddate);
return 0;
}
现在它是一个相当简单的程序。正如我所料,在第一次调用fgets()
之后,输入存储在char数组firstdate
中。但是在第二次调用fgets()
之后,firstdate
char数组中的值似乎已经丢失了。不知道发生了什么或为什么我得到这样的结果。你能救我吗?
结果:
Enter the First Date in this format:DD/MM/YYYY
10/01/1997
Check: 10/01/1997
Enter the second Date in this format:DD/MM/YYYY
20/04/1995
Check: 20/04/1995
second Check:
second Check: 20/04/1995
奇怪的是,尽管数组太小而无法容纳内容,但它最初能够正确保存(正如第一个输出所示)。 调用第二个fgets函数摆脱了'firstdate'变量
答案 0 :(得分:2)
您的char[]
太小,无法容纳您所读的内容:
char firstdate[10]; // array of 10 bytes
fgets(firstdate, 11, stdin); // read 11 bytes
并且,来自fgets()
的手册页:
在找到换行符时,在文件结尾或错误时停止读取。保留换行符(如果有)。如果读取任何字符且没有错误,则为“\ 0'附加字符以结束字符串。
所以你应该声明大小为13的数组并读取12个字节(直到找到'\n'
):
char firstdate[13];
char seconddate[13];
fgets(firstdate, 12, stdin);
fgets(seconddate, 12, stdin);