S1E22中的length - 1关于scanf和fgets的讨论
#include <stdio.h>#define MAX 1024
int main()
{
char str;
char *target = str;
int length = 0;
printf("请输入一个字符串:");
fgets(str, MAX, stdin);
while (*target++ != '\0')
{
length++;
}
printf("您总共输入了 %d 个字符!\n", length - 1);
return 0;
}
和
#include <stdio.h>
#define MAX 1024
int main()
{
char str;
char *target = str;
int length = 0;
printf("请输入一个字符串:");
scanf("%s", str);
while (*target++ != '\0')
{
length++;
}
printf("您总共输入了 %d 个字符!\n", length - 1);
return 0;
}
两段代码中只有fgets和scanf交换了一下是用相同的字符输出前者正确而后者少一,这是为什么?
如果可以能帮忙说明下scanf和fgats的区别吗?
{:10_254:} 有点粗心第一个问题已经搞懂
( fgets 函数会把换行符('\n')也一并读取进去,但我们并不希望把它也计算进去)
求答第二个{:10_266:} 1.scanf()
所在头文件:stdio.h
语法:scanf(“格式控制字符串”,变量地址列表);
接受字符串时:scanf(“%s”,字符数组名或指针);
2.gets()
所在头文件:stdio.h
语法:gets(字符数组名或指针);
从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字符串。
输出可以考虑puts()函数的应用输出完后会自动加一个回车换行符号
char* gets(char* buffer)
返回值
读入成功,返回与参数buffer相同的指针;读入过程中遇到EOF(End-of-File)或发生错误,返回NULL指针。所以在遇到返回值为NULL的情况,要用ferror或feof函数检查是发生错误还是遇到EOF。
两者在接受字符串的不同点:
scanf不能接受空格、制表符Tab、回车等;
而gets能够接受空格、制表符Tab和回车等;
scanf :当遇到回车,空格和tab键会自动在字符串后面添加’\0’,但是回车,空格和tab键仍会留在输入的缓冲区中。
gets:可接受回车键之前输入的所有字符,并用’\0’替代 ‘\n’.回车键不会留在输入缓冲区中。
length - 1 是因为 length++ 在 while 循环里面,在检测到最后一个字符后,它又自加了一次
页:
[1]