C 語言標準輸入輸出頭文件stdio.h及其常見用法

在這篇文章中,我們來詳細聊一聊 C 語言標準輸入輸出頭文件 stdio.h 及其常見用法。


1. stdio.h 是什么

stdio.h(Standard Input and Output Header)是 C 標準庫中的一個頭文件,提供了處理標準輸入輸出和一些文件操作的函數聲明。

它包含的主要功能有:

  1. 標準輸入輸出stdin, stdout, stderr
  2. 格式化輸入輸出printf, scanf, fprintf, fscanf 等)
  3. 字符輸入輸出getchar, putchar, gets, puts 等)
  4. 文件讀寫fopen, fclose, fread, fwrite, fgets, fputs 等)
  5. 文件定位fseek, ftell, rewind 等)
  6. 錯誤處理perror, feof, ferror 等)

2. 常見數據類型與宏

stdio.h 中不僅有函數聲明,還包含了一些類型定義和宏。

常見類型

  • FILE
    • 用于表示一個文件流(File Stream)的結構體類型,內部存儲文件狀態、緩沖區等信息。
  • size_t
    • 用于表示對象大小存儲容量的無符號整數類型。

常見宏

  • NULL:空指針常量。
  • EOF:文件結束標志(End Of File),通常值為 -1
  • BUFSIZ:緩沖區大小常量。
  • stdin / stdout / stderr:分別表示標準輸入流、標準輸出流和標準錯誤流。

3. 常用輸入輸出函數

3.1 格式化輸出函數

#include <stdio.h>int printf(const char *format, ...);
int fprintf(FILE *stream, const char *format, ...);
int sprintf(char *str, const char *format, ...);
int snprintf(char *str, size_t size, const char *format, ...);
  • printf → 向標準輸出打印數據。
  • fprintf → 向指定文件流打印數據。
  • sprintf → 將格式化后的數據存入字符串(不安全,可能溢出)。
  • snprintf → 將格式化數據存入字符串,并限制最大長度(推薦替代 sprintf)。

示例:

#include <stdio.h>
int main() {int age = 25;printf("年齡: %d\n", age);return 0;
}

3.2 格式化輸入函數

int scanf(const char *format, ...);
int fscanf(FILE *stream, const char *format, ...);
int sscanf(const char *str, const char *format, ...);
  • scanf → 從標準輸入讀取數據。
  • fscanf → 從指定文件流讀取數據。
  • sscanf → 從字符串中讀取數據。

示例:

#include <stdio.h>
int main() {int num;printf("請輸入一個數字: ");scanf("%d", &num);printf("你輸入的數字是: %d\n", num);return 0;
}

?? 注意:scanf 在讀取字符串時容易發生緩沖區溢出,推薦用 fgets 等更安全的函數。


3.3 字符輸入輸出

int getchar(void);           // 從 stdin 讀取一個字符
int putchar(int c);          // 輸出一個字符到 stdout
char *gets(char *s);         // 從 stdin 讀取一行(不安全,已被移除 C11)
char *fgets(char *s, int n, FILE *stream); // 更安全的讀取字符串
int puts(const char *s);     // 輸出字符串并換行

示例:

#include <stdio.h>
int main() {char name[20];printf("請輸入你的名字: ");fgets(name, sizeof(name), stdin);printf("你好, %s", name);return 0;
}

3.4 文件操作函數

FILE *fopen(const char *filename, const char *mode);
int fclose(FILE *stream);
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
char *fgets(char *s, int n, FILE *stream);
int fputs(const char *s, FILE *stream);
int fprintf(FILE *stream, const char *format, ...);

示例:

#include <stdio.h>
int main() {FILE *fp = fopen("test.txt", "w");if (fp == NULL) {perror("文件打開失敗");return 1;}fprintf(fp, "Hello, 文件!\n");fclose(fp);return 0;
}

3.5 文件定位函數

int fseek(FILE *stream, long offset, int whence); // 定位文件指針
long ftell(FILE *stream);                         // 獲取當前文件指針位置
void rewind(FILE *stream);                        // 重置文件指針到開頭

3.6 錯誤與結束檢測

void perror(const char *s); // 打印最近的錯誤信息
int feof(FILE *stream);     // 檢測文件是否到達 EOF
int ferror(FILE *stream);   // 檢測文件操作是否發生錯誤

4. 使用注意事項

  1. 安全性
    • 避免使用 gets(已廢棄)
    • 使用 fgets + 手動去除換行符代替
  2. 緩沖區問題
    • stdin 默認行緩沖模式,stdout 默認行緩沖(終端時)/全緩沖(文件時)
  3. 文件操作后記得關閉
    • fclose(fp);
  4. 檢查返回值
    • 輸入輸出函數失敗時會返回特殊值,比如 EOF 或負數。

5. 小結

  • stdio.h 是 C 語言 IO 功能的核心頭文件。
  • 核心用途:格式化輸入輸出、字符輸入輸出、文件操作等。
  • 常用函數:printfscanffgetsfopenfclosefreadfwrite
  • 需要注意安全性和返回值的檢查。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/919865.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/919865.shtml
英文地址,請注明出處:http://en.pswp.cn/news/919865.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Js逆向 拼夕夕anti_content

前言 本文章中所有內容僅供學習交流使用&#xff0c;不用于其他任何目的&#xff0c;不提供完整代碼&#xff0c;抓包內容、敏感網址、數據接口等均已做脫敏處理&#xff0c;嚴禁用于商業用途和非法用途&#xff0c;否則由此產生的一切后果均與作者無關&#xff01;本文章未經…

大模型時代為什么需要向量數據庫?

這里寫自定義目錄標題1. 向量數據庫2. 向量嵌入3. 特征和向量4. 相似性測量4.1 歐幾里得距離4.2 余弦相似度5. 相似性搜索5.1 K-Means5.2 基于文本嵌入進行意圖匹配6. 問答助手7. 意圖匹配1. 向量數據庫 向量數據庫&#xff08;Vector Database&#xff09;&#xff0c;也叫矢…

【Canvas與旗幟】二十角金盤德國旗

【成圖】【代碼】<!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>多角金盤德國旗 Draft1</title><style type"text/css&qu…

Linux軟件編程:總結

一、Linux系統概述&#xff08;一&#xff09;Linux系統概述&#xff08;二&#xff09;Linux系統簡介1.常見的Linux系統&#xff1f;2.Linux操作系統是操作系統的核心&#xff0c;也成為內核&#xff0c;內核的主要功能&#xff1f;3.shell是操作系統的外殼&#xff0c;主要作…

【51單片機學習】直流電機驅動(PWM)、AD/DA、紅外遙控(外部中斷)

一、直流電機驅動&#xff08;PWM&#xff09;1.直流電機介紹步進電機的旋轉速度完全由編碼的通電時間決定的&#xff0c;可以用于精密控制。 舵機內部是一個直流電機加一個控制器&#xff0c;引出三根線&#xff0c;分別是正負極和編碼線&#xff0c;根據輸出電平的時間來控制…

ComfyUI Portrait Master肖像大師中文版

本文轉載自&#xff1a;ComfyUI Portrait Master肖像大師中文版 - Hello123工具導航 ** 一、產品定位與技術架構 肖像大師中文版是專為 AI 繪畫工具設計的提示詞生成插件&#xff0c;通過結構化參數控制實現精準人物肖像生成。它基于 ComfyUI 平臺開發&#xff0c;提供 193 國…

(Redis)內存淘汰策略

1. 為什么需要內存淘汰策略&#xff1f;Redis 是一個基于內存的高性能數據庫&#xff0c;所有數據都存儲在內存中。優點&#xff1a;讀寫速度極快。缺點&#xff1a;內存有限&#xff0c;存滿之后如果繼續寫入&#xff0c;就必須有一套策略來決定“刪掉誰&#xff0c;留下誰”。…

Eclipse 里Mybatis的xml的頭部報錯

需要進行Eclipse 配置 MyBatis 的DTD文件Window -> Preference -> Maven -> 勾選 (download artifact javadoc).

SpringBoot Web快速入門_從零搭建你的第一個Web應用

在 Java 企業級開發領域&#xff0c;SpringBoot 以其 “約定優于配置” 的理念徹底革新了傳統 Spring 應用的開發模式。根據 2023 年 JetBrains 開發者調查報告&#xff0c;超 65% 的 Java 開發者將 SpringBoot 選為 Web 開發的首選框架。其優勢顯著&#xff1a;快速啟動&#…

手持 Mid360 + RealSense 相機 + Jetson Orin 一體平臺

這篇博客是我們開源的一個項目介紹&#xff0c;包括3D結構件 STP 文件與常見 SLAM 工程在 Arm 設備上編譯手冊等&#xff0c;將 Livox Mid360、Realsense 相機、Nvidia Jetson Orin、定制電池放在了一個手持設備上&#xff0c;同時這個手持設備預留了底部螺紋孔&#xff0c;當你…

H7-TOOL固件2.31發布,支持250M示波器,支持IAR下載算法加載運行,上位機支持UTF-8編碼,增加多款脫機燒錄芯片支持

【PC軟件】V2.3.1 1. 脫機燒錄功能更新: - 添加芯片: - 自動填充文件名、Flash地址、Flash大小、SRAM地址和SRAM大小 - FLM算法文件不支持自動填寫文件名&#xff0c;當生成文件后需要手動更新 - 廠商列表欄鼠標右鍵菜單可復制廠商名 - 修復添加芯片排列次序的問題…

自然語言處理——06 遷移學習(上)

1 fasttext工具介紹 1.1 介紹 fasttext 是 Facebook AI Research&#xff08;FAIR&#xff09;開發的開源 NLP 工具包&#xff0c;專門用來解決文本相關任務&#xff0c;比如情感分析、文本分類&#xff08;判斷新聞屬于體育/財經等&#xff09;、識別“人名/地名”這類實體&a…

數據庫MVCC是什么

問題數據庫MVCC是什么我的回答MVCC&#xff0c;全稱是"多版本并發控制"(Multi-Version Concurrency Control)&#xff0c;是數據庫管理系統中常用的一種并發控制技術。說白了&#xff0c;它就是通過維護數據的多個版本&#xff0c;讓讀操作不會被寫操作阻塞&#xff…

游戲廣告投放數據分析項目:拆解投放的“流量密碼”

用數據說話&#xff1a;1441條投放記錄拆解游戲廣告投放的“流量密碼”一、數據概況 & 處理思路 先放一張數據全家福&#xff0c;字段 13 個&#xff0c;樣本 1441 條&#xff0c;缺失值 0&#xff0c;只做了一件事&#xff1a;把“未知大小”“無”等臟數據清洗掉。 impor…

數據庫服務語句應用

文章目錄&#x1f31f;數據庫語句應用介紹&#x1f340;數據庫語句分類介紹DDL&#xff08;Data Definition Language&#xff09;數據定義語言DCL&#xff08;Data Control Language&#xff09;數據控制語言DML&#xff08;Data Manipulation Language&#xff09;數據操作語…

解釋器模式與布爾表達式的C++實現

詳細探討一下解釋器模式(Interpreter Pattern)以及如何使用它來實現一個簡單的布爾表達式求值器。 第一部分:解釋器模式詳解 1. 模式定義與意圖 解釋器模式是一種行為設計模式,它給定一個語言,定義其文法的一種表示,并定義一個解釋器,該解釋器使用該表示來解釋語言中…

ELK 重難點解析以及最佳實踐

ELK 重難點解析以及最佳實踐 目錄 ELK簡介核心組件詳解使用技巧重難點解析Spring Boot集成具體場景使用最佳實踐 ELK簡介 什么是ELK ELK是一個開源的日志分析平臺&#xff0c;由三個核心組件組成&#xff1a; Elasticsearch: 分布式搜索引擎&#xff0c;用于存儲和檢索日…

【PyTorch】單對象分割項目

對象分割是在圖像中找到目標對象的邊界的過程。單目標分割的重點是自動勾勒出圖像中一個目標對象的邊界。對象邊界通常由二進制掩碼定義。 通過二進制掩碼&#xff0c;可以在圖像上覆蓋輪廓以勾勒出對象邊界。例如以下圖片描繪了胎兒的超聲圖像、胎兒頭部的二進制掩碼以及覆蓋在…

esp dl

放下了好多年 又回到了dl 該忘的也忘的差不多了 其實沒啥復雜的 只是不習慣 熟悉而已 好吧 現代的人工智能體 還是存在著很大的問題 眼睛 耳朵 思考 雖然功能是正常的 但距離&#xff02;真正&#xff02;(&#xff09;意思上的獨立意識個體 還是差別很大 再等個幾十年 看看…

基于django/python的服裝銷售系統平臺/服裝購物系統/基于django/python的服裝商城

基于django/python的服裝銷售系統平臺/服裝購物系統/基于django/python的服裝商城