根据我的理解,fgets()
将扫描输入,直到回车(\n
),但我的代码显示不然。我不知道额外的线路来自哪里。有人可以解释一下吗?
#include <stdio.h>
#include <string.h>
#define BUF_SZ 256
void reverse(char str[]) {
/* fill in the function body please */
for (int i = 0, j = strlen(str) - 1; i < strlen(str) / 2; i++, j--)
{
char temp; // perform the swap
temp = str[i];
str[i] = str[j];
str[j] = temp;
}
}
int main() {
char mesg[BUF_SZ];
printf("Enter a message please=> ");
fgets(mesg,BUF_SZ,stdin);
reverse(mesg);
printf("%s\n",mesg);
return 0;
}
答案 0 :(得分:4)
您输入的是“Hello”,后跟换行符。你颠倒了它,得到一个换行符后跟“你好”。然后你打印出来,接着是换行符。
fgets(mesg,BUF_SZ,stdin);
好的,现在我们有“你好”,然后是换行符。
reverse(mesg);
好的,现在我们有一个换行符后跟“olleH”。
printf("%s\n",mesg);
然后我们输出,然后是另一个换行符。
什么是神秘的?
答案 1 :(得分:2)
从fgets文档中,它会在输入中保留回车符\n
:
最多读取 - 给定文件流中的1个字符,并将它们存储在str指向的字符数组中。如果发生文件结束或找到换行符,则读取停止,在这种情况下, str将包含该换行符。如果没有错误发生,请在写入str的最后一个字符后面的位置写入一个空字符。
所以,
"Hello\n"
变为:
"\nelloH"
这就是你得到的东西!