You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C语言中不使用scanf函数获取输入?

在C语言中不使用scanf获取输入的方法

下面是几种常用的替代方案,每种都附代码示例和说明:

使用getchar()函数

getchar()会从标准输入(stdin)逐个读取字符,返回读取到的字符(ASCII值),遇到文件结束时返回EOF。适合读取单个字符,或者手动拼接成字符串。

示例1:读取单个字符

#include <stdio.h>

int main() {
    char ch;
    printf("输入一个字符:");
    ch = getchar(); // 读取单个字符
    printf("你输入的字符是:%c\n", ch);
    return 0;
}

示例2:读取整行字符串(手动处理)

#include <stdio.h>

int main() {
    char str[100];
    int i = 0;
    printf("输入一行字符串:");
    
    // 逐个读取字符,直到换行或数组满
    while ((str[i] = getchar()) != '\n' && i < 99) {
        i++;
    }
    str[i] = '\0'; // 添加字符串结束符
    
    printf("你输入的字符串是:%s\n", str);
    return 0;
}

注意:如果输入前有残留的换行符(比如之前的输入操作留下的),需要先调用getchar()清除。

使用fgets()函数

fgets()专门用于读取一行字符串,会把换行符\n也读入缓冲区,并且自动在末尾添加\0,是比较安全的读取方式(只要指定的缓冲区大小足够)。

示例:读取一行输入

#include <stdio.h>
#include <string.h>

int main() {
    char str[100];
    printf("输入一行字符串:");
    
    // 从stdin读取最多99个字符(留一个位置给'\0')
    fgets(str, sizeof(str), stdin);
    
    // 去掉末尾的换行符(如果存在)
    if (str[strcspn(str, "\n")] == '\n') {
        str[strcspn(str, "\n")] = '\0';
    }
    
    printf("你输入的字符串是:%s\n", str);
    return 0;
}

strcspn()用来找到换行符的位置,方便我们替换成结束符,避免输出时多一个空行。

使用read()系统调用(仅POSIX系统,如Linux/Unix)

read()是系统级别的输入函数,直接从文件描述符读取字节,stdin的文件描述符是0。需要包含头文件<unistd.h>。

示例:读取输入字节

#include <unistd.h>
#include <stdio.h>

int main() {
    char buffer[100];
    ssize_t bytes_read;
    
    printf("输入内容:");
    // 从stdin读取最多99个字节
    bytes_read = read(0, buffer, sizeof(buffer) - 1);
    
    if (bytes_read > 0) {
        buffer[bytes_read] = '\0'; // 手动添加结束符
        printf("读取到的内容:%s\n", buffer);
    } else if (bytes_read == 0) {
        printf("已到达输入末尾\n");
    } else {
        perror("读取失败");
    }
    
    return 0;
}

注意:read()不会自动处理换行符或添加字符串结束符,需要手动处理。另外这个方法在Windows系统下不可用。

额外注意点

  • 所有方法都需要注意缓冲区溢出问题,确保定义的数组大小足够容纳输入内容。
  • 如果输入包含空格、制表符等特殊字符,fgets()和手动用getchar()拼接的方式都能正常处理,这一点和scanf("%s")不同(后者会在空格处停止读取)。

内容的提问来源于stack exchange,提问作者Rishabh Dhawad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 07:22:37