C语言中的输入方法汇总

1.基于字符的输入函数

        1.1        getchar()

                        语法:int getchar(void);

#include <stdio.h>

int main() {
    int c;
    printf("请输入字符,按Ctrl+D结束: ");
    
    // 逐个读取字符直到文件结束
    while ((c = getchar()) != EOF) {
        printf("读取到字符: '%c' (ASCII: %d)\n", c, c);
    }
    return 0;
}


        1.2        getc() 和 fgetc()

                  语法:int   getc(FILE *stream)和  int   fgetc(FILE *stream);

#include <stdio.h>

int main() {
    FILE *file = fopen("test.txt", "r");
    int c;
    
    printf("从文件读取: ");
    while ((c = fgetc(file)) != EOF) {
        putchar(c);
    }
    fclose(file);
    
    printf("\n从键盘读取: ");
    c = getc(stdin);  // 等同于 getchar()
    printf("你输入了: %c\n", c);
    
    return 0;
}

2. 基于行的输入函数

        2.1        fgets()

                        语法:char *fgets(char *str, int n, FILE *stream);

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

int main() {
    char line[100];
    
    printf("请输入一行文本: ");
    if (fgets(line, sizeof(line), stdin) != NULL) {
        // 移除换行符
        line[strcspn(line, "\n")] = '\0';
        printf("你输入了: '%s'\n", line);
        printf("字符串长度: %zu\n", strlen(line));
    }
    
    return 0;
}

        2.2        gets()不推荐用

                       

#include <stdio.h>

int main() {
    char small_buffer[5];
    
    printf("危险演示 - 输入超过4个字符: ");
    gets(small_buffer);  // 缓冲区溢出!
    
    printf("缓冲区内容: %s\n", small_buffer);
    return 0;
}

3. 格式化输入函数

          3.1        scanf() 系列

                        语法:     int scanf(const char *format, ...);
                                        int fscanf(FILE *stream, const char *format, ...);
                                        int sscanf(const char *str, const char *format, ...);

#include <stdio.h>

int main() {
    int age;
    float height;
    char name[50];
    char city[30];
    
    // scanf 从标准输入读取
    printf("请输入 姓名 年龄 身高: ");
    int result = scanf("%49s %d %f", name, &age, &height);
    printf("成功读取了 %d 个值\n", result);
    
    // fscanf 从文件读取
    FILE *file = fopen("data.txt", "w+");
    fprintf(file, "Beijing 25 175.5");
    rewind(file);
    
    fscanf(file, "%29s %d %f", city, &age, &height);
    printf("城市: %s, 年龄: %d, 身高: %.1f\n", city, age, height);
    fclose(file);
    
    // sscanf 从字符串读取
    char data[] = "上海 30 168.2";
    sscanf(data, "%29s %d %f", city, &age, &height);
    printf("从字符串解析: %s, %d, %.1f\n", city, age, height);
    
    return 0;
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值