|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
#define MAX 1024
int main()
{
char str[MAX];
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[MAX];
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的区别吗?
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’.回车键不会留在输入缓冲区中。
|
|