#include <head.h>
int main(int argc, const char *argv[])
{
char buf[1024];
do{
fgets(buf,sizeof(buf),stdin);
buf[strlen(buf) - 1] = '\0';
printf("output:%s.\n",buf);
}while(buf[0] != '\0');
return 0;
}
./a.out后输入123456
回车后按ctrl+d
就变成12345
依次递减直到退出
我觉得应该不是循环的结果吧,do while循环本质上只起到了一个判断的作用。
运行./a.out后,123456回车,输出output :123456.
(程序还没有退出)再输入回车,程序就退出。
而主要困惑是,当输出output :123456 时,再按ctrl+d,就变成
output :12345 ,那个6是怎么被吃掉的 ,貌似与buf-1有关,可这样想讲不通啊
Ctrl+D 只是相当于输入了EOF
第一次fgets后buf内容”123456\n“,千万别忘了最后的换行符\n(16进制为0A)
然后buf[strlen(buf) - 1] = '\0',buf内容为”123456“,最后的换行符清掉了
第二次fgets,因为只读入了EOF,所以什么都没读到(跟换行符不同,直接回车能读到换行符),
buf内容仍为“123456”
然后buf[strlen(buf) - 1] = '\0',buf内容为”12345“,最后的‘6’清掉了
。。。
你在fgets后面加上调试语句就能看出来了,最好是设置断点,查看变量内容