首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C語言循環求和與輸入輸出函數辨析:puts vs putchar vs printf

     編輯:C 語言問答

從簡單求和到 I/O 函數深度解析

經典累加循環分析

int k, s = 0;
for (k = 1; k <= 10; ++k)
    s = s + k;
// 結果:s = 55 (1+2+...+10)

++k vs k++ 在獨立語句中無區別:兩者都將 k 加 1。區別僅在表達式中:++k 先加後用,k++ 先用後加。

三大字符輸出函數對比

函數功能換行行為返回值適用場景
putchar(c)輸出單字符不自動換行成功返回字符,失敗返回 EOF逐字符處理、高性能輸出
puts(str)輸出字符串自動補全換行成功非負,失敗 EOF整行輸出、調試信息
printf(fmt, ...)格式化輸出按格式符控制輸出字符數,失敗負值複雜格式、多類型混合輸出

代碼示例

#include <stdio.h>

int main() {
    char c = 'A';
    char str[] = "Hello World";
    
    // putchar:單字符
    putchar(c); putchar('\n');  // 輸出: A\n
    
    // puts:字符串+自動換行
    puts(str);                  // 輸出: Hello World\n
    
    // printf:萬能格式化
    printf("Char: %c, String: %s, Int: %d\n", c, str, 65);
    // 輸出: Char: A, String: Hello World, Int: 65
    
    // printf 也能輸出字符串
    printf("%s\n", str);        // 等同於 puts(str) 但不自動換行
    
    return 0;
}

對應輸入函數

輸出函數對應輸入函數特點
putchargetchar單字符,帶回顯,需回車確認
putsgets (已棄用)整行讀取,危險:無緩衝區保護
printfscanf格式化讀取,功能最強但最複雜

安全替代方案

// 替代 gets:fgets(指定緩衝區大小)
char buf[100];
fgets(buf, sizeof(buf), stdin);
// 去除末尾換行符
buf[strcspn(buf, "\n")] = '\0';

// 替代 scanf 讀字符串:scanf 寬度限制
char name[20];
scanf("%19s", name);  // 最多讀 19 字符,留 1 位給 \0

最佳實踐建議

  1. 調試輸出:優先用 puts 或 printf("...\\n")
  2. 高性能字符處理:用 putchar/getchar
  3. 格式化需求:必須用 printf/scanf
  4. 避免 gets:已從 C11 標準移除,極易導致緩衝區溢出漏洞
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved