c语言中scanf(“%s“,ch)和gets(ch)的区别(补充:scanf(“%[^\n]“,ch); getchar();)

ch为char类型的数组
gets()和scanf()的区别在于输入的字符串是否中间有空格:
对于前者,只有遇到"\n"时才停止输入,而对于后者,出现"\n"或空格都停止输入。

gets(ch):

#include <cstdio>

int main()
{
    char ch[100];
    gets(ch);
    printf("%s\n",ch);
    return 0;
}

运行结果:
在这里插入图片描述
scanf("%s",ch):

#include <cstdio>

int main()
{
    char ch[100];
    while (1){
        scanf("%s",ch);
        printf("%s",ch);
    }
    return 0;
}

运行结果:
在这里插入图片描述

补充:
scanf("%s",ch)
%s格式符表示用来输入出一个字符串,而字符串是以数组的形式的存储的。c语言中数组名代表该数组的起始地址。此处的ch为char类型的数组,因此不需要再加&

while(~scanf("%s",str)){
}
scanf()函数的返回值是成功读取变量的个数,这里可能返回是1或0,当返回0时,~0为真,则继续循环,所以该循环的意思是,直到成功读取一个字符串时,才结束循环。

补充2:
scanf("%[^\n]",ch)
表示读入一行字符串
^表示“非”
[^\n]表示读入换行字符就结束读入

补充3:
getchar()函数
gerchar()函数每次从缓冲区中得到一个字符
注:回车也算一个字符

当程序调用getchar时,程序就等着用户按键。用户输入的字符被存放在键盘缓冲区中,直到用户按回车为止(回车字符也放在缓冲区中)。即回车是用户输入结束的标志,同时也会将回车字符也放在缓冲区中,此时getchar才开始从键盘缓冲区中读取数据,包括回车符。

另外,对与何时使用getchar()获取换行符,可以参照我的这篇文章:
对于何时使用getchar()获取换行符的总结

补充4:
gets()函数
gets() 函数的功能是从输入缓冲区中读取一个字符串存储到字符指针变量 str 所指向的内存空间。
用gets()函数来读取,可能会超出存储数组的范围。
此外,关于使用 gets() 函数需要注意:使用 gets() 时,系统会将最后“敲”的换行符从缓冲区中取出来,然后丢弃,所以缓冲区中不会遗留换行符。这就意味着,如果前面使用过 gets(),而后面又要从键盘给字符变量赋值的话就不需要吸收回车清空缓冲区了,因为缓冲区的回车已经被 gets() 取出来扔掉了。

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
fgetsscanfgetsgetchar、fscanf和sscanf都是C语言用于输入的API,它们的区别在于: 1. fgets()函数从指定的文件流读取一行字符,同时还可以指定读取的最大字符数,读取到换行符或文件结束符时停止。常用于读取文本文件的内容。 2. scanf()函数根据指定的格式字符串从标准输入或指定文件流读取字符或数字,并把读取到的值存入对应的变量。常用于从键盘或文件读取数据。 3. gets()函数从标准输入读取一行字符,不限制读取的字符数,读取到换行符时停止。因为无法控制输入的字符数,容易发生缓冲区溢出的安全问题,不建议使用。 4. getchar()函数从标准输入读取一个字符。常用于字符逐个处理的情况。 5. fscanf()函数根据指定的格式字符串从指定文件流读取字符或数字,与scanf()函数类似。 6. sscanf()函数根据指定的格式字符串从一个字符串读取字符或数字,并把读取到的值存入对应的变量。常用于字符串解析的情况。 下面是一些使用示例: (1)fgets()函数示例: ``` #include <stdio.h> int main() { char str[100]; FILE *fp = fopen("test.txt", "r"); fgets(str, 100, fp); printf("读取的内容是:%s", str); fclose(fp); return 0; } ``` (2)scanf()函数示例: ``` #include <stdio.h> int main() { int num; printf("请输入一个整数:"); scanf("%d", &num); printf("您输入的整数是:%d", num); return 0; } ``` (3)gets()函数示例: ``` #include <stdio.h> int main() { char str[100]; printf("请输入一个字符串:"); gets(str); printf("您输入的字符串是:%s", str); return 0; } ``` (4)getchar()函数示例: ``` #include <stdio.h> int main() { char ch; printf("请输入一个字符:"); ch = getchar(); printf("您输入的字符是:%c", ch); return 0; } ``` (5)fscanf()函数示例: ``` #include <stdio.h> int main() { int num; FILE *fp = fopen("test.txt", "r"); fscanf(fp, "%d", &num); printf("读取的整数是:%d", num); fclose(fp); return 0; } ``` (6)sscanf()函数示例: ``` #include <stdio.h> int main() { char str[] = "123 45.6 abc"; int num; float fnum; char str2[10]; sscanf(str, "%d %f %s", &num, &fnum, str2); printf("解析出的整数是:%d\n", num); printf("解析出的浮点数是:%f\n", fnum); printf("解析出的字符串是:%s", str2); return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值