C语言基础(12)-输入和输出

1. int scanf(const char *format, ...)

说明:scanf用于通过控制台输入字符串。

注意:

(1).通过scanf()函数输入的字符串,系统会自动在其后面补一个0,scanf默认回车和空格都是代表输入完成,这样会导致无法输入一个完整的字符串。

(2).scanf()函数并不检查char数组的下标,用户输入多少scanf就会保存多少,假如用户输入的字符长度超过了定义的char数组的长度,则会发生溢出。scanf函数是不安全的。

示例:

复制代码
#include <stdio.h>
#pragma warning(disable:4996)

void main() {

    char a[10] = {0};
    scanf("%s",a);
    printf("%s\n",a);
    system("pause");

}
复制代码

 

2. char *gets(char *str)

说明:从标准输入中读取一行,并将其存储到由str指向的字符串.

注意:

(1).gets函数只认回车代表输入完毕,空格只是一个普通字符而已,因此可以输出空格。

(2).gets函数同样有缓冲区溢出的问题。使用gets和scanf都会面临缓冲区溢出的问题,因此两者都不安全。

 

3. char *fgets(char *str, int n, FILE *stream)

说明:从标准输入中读取一行,并将其存储到由str指向的字符串.

注意:

(1).fgets函数有三个参数。第一个参数是char的数组,第二个参数是标明这个数组的大小,第三个参数如果是通过键盘输入可以固定写为stdin.

(2).fgets函数是安全的,不存在缓冲区溢出的问题。

(3).fgets函数在读取一个用户通过键盘输入的字符串的时候,同时把用户输入的回车键也作为字符串的一部分,因此使用fgets函数后在输出时,不需要添加\n。当输入长度超过了缓冲区长度时,多出的部分将会被截断。

复制代码
#include <stdio.h>
#pragma warning(disable:4996)

void main() {

    char a[10] = {0};
    fgets(a,sizeof(a),stdin);
    printf("%s",a);
    system("pause");

}
复制代码

 

4. int puts(const char *str)

说明:输出一个字符串。

注意:

(1).puts函数打印字符串,与printf不同,puts会在最后自动添加一个’\n’

(2).put函数不支持转义字符,比如%d,%s都不支持,puts函数只能简单输出一个字符串,而不能输出char,int,double等其它类型.

复制代码
#include <stdio.h>
#pragma warning(disable:4996)

void main() {

    char s[] = "hello world";
    puts(s);
    system("pause");

}
复制代码

复制代码
#include <stdio.h>
#pragma warning(disable:4996)

void main() {

    char s[] = "hello world";
    puts("%d%s",1,s);
    system("pause");

}
复制代码

 

5. int fputs(const char *str, FILE *stream)

说明:输出一个字符串。

注意:

(1).第一个参数是char的数组,第二个参数如果只是用puts在屏幕输出的话可以固定写成stdout

(2).fputs不会自动输出一个\n

(3).fputs是puts的文件操作版本

复制代码
#include <stdio.h>
#pragma warning(disable:4996)

void main() {

    char s[] = "hello world";
    fputs(s, stdout);
    system("pause");
}
复制代码

 

 



如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
posted @   夜行过客  阅读(715)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示