C语言中的输入控制重要基础

在C语言编程中,处理输入数据是一个常见的任务。根据不同的情况,我们可以采用不同的输入控制方法。本文将介绍三类输入控制方式,分别是已知数据组数的输入、以特定符号结束的输入,以及以EOF结束的输入。

1. 已知数据组数的输入

在某些情况下,输入的数据组数是已知的。这种情况下,我们可以首先读取一个整数,表示数据组数,然后通过循环逐组处理数据。

示例代码:

c 复制代码
#include <stdio.h>
int main() {
    int n; // 数据组数
    printf("请输入数据组数: ");
    scanf("%d", &n);  // 读取数据组数
    
    for (int i = 0; i < n; i++) {
        int num1, num2;
        printf("请输入第 %d 组数据 (两个整数,用空格分隔): ", i + 1);
        scanf("%d %d", &num1, &num2);  // 读取每组数据
        printf("第 %d 组数据是: %d 和 %d,和为: %d\n", i + 1, num1, num2, num1 + num2);
    }

    return 0;
}

输入输出示例:

复制代码
请输入数据组数: 3
请输入第 1 组数据 (两个整数,用空格分隔): 5 10
第 1 组数据是: 5 和 10,和为: 15
请输入第 2 组数据 (两个整数,用空格分隔): 3 4
第 2 组数据是: 3 和 4,和为: 7
请输入第 3 组数据 (两个整数,用空格分隔): 8 2
第 3 组数据是: 8 和 2,和为: 10

解释:

  • 用户输入的数据组数为3,每组数据由两个整数构成,程序输出它们的和。
  • 第一步 :通过 scanf("%d", &n) 读取数据组数 n
  • 第二步 :使用 for 循环遍历 n 次,逐组读取数据并进行处理。

2. 以特定符号结束的输入

在一些情况下,输入的数据组数是不确定的,但可以通过某个特定符号(如 @-1 等)来结束输入。可以使用 while 循环和 scanf 函数来实现。

示例代码:

c 复制代码
#include <stdio.h>

int main() {
    char c; // 用于存储输入字符
    printf("请输入数据(输入 '@' 结束):\n");
    
    int count = 0; // 统计输入字符的数量
    while (scanf(" %c", &c) && c != '@') {  // 读取字符,直到遇到 '@'
        printf("你输入的字符是: %c\n", c);
        count++;
    }
    printf("你总共输入了 %d 个字符。\n", count);
    return 0;
}

输入输出示例:

复制代码
请输入数据(输入 '@' 结束):
a
你输入的字符是: a
b
你输入的字符是: b
c
你输入的字符是: c
@
你总共输入了 3 个字符。

解释:

  • 用户输入多个字符,直到输入 @ 为止,程序统计并输出输入的字符数量。
  • 条件判断while 循环读取字符,直到遇到 @scanf(" %c", &c) 中的空格用于忽略前导空格和换行符注意%c前面的空格.
  • 处理输入:在每次循环中,程序输出读取的字符。

3. 以EOF结束的输入

在某些情况下,输入没有明确的结束项,而是通过文件结束符(EOF)来结束。可以通过检查 scanf 的返回值来实现此功能。在Windows系统中,可以通过 Ctrl + Z 组合键然后按回车键模拟EOF。

示例代码:

c 复制代码
#include <stdio.h>
int main() {
    int num; // 存储输入的整数
    printf("请输入数字(Ctrl + Z 然后回车键 结束输入):\n");
    int sum = 0; // 存储输入数字的总和
    int count = 0; // 统计输入数字的数量

    while (scanf("%d", &num) != EOF) {  // 循环读取整数,直到EOF
        sum += num;
        count++;
        printf("你输入的数字是: %d\n", num);
    }

    if (count > 0) {
        printf("你总共输入了 %d 个数字,和为: %d\n", count, sum);
    } else {
        printf("没有输入任何数字。\n");
    }
    return 0;
}

输入输出示例:

复制代码
请输入数字(Ctrl + Z 结束输入):
1
你输入的数字是: 1
2
你输入的数字是: 2
3
你输入的数字是: 3
Ctrl + Z
你总共输入了 3 个数字,和为: 6

解释:

  • 用户输入多个整数,程序在用户输入 EOF 时结束读取,并输出输入的数字总和和数量。
  • EOF检测 :通过 scanf("%d", &num) != EOF 检查输入是否结束。
  • 数据处理:在每次成功读取整数后,输出该数字。

总结

在C语言中,输入控制的方式多种多样。根据数据的特点和输入的要求,可以选择合适的方法进行数据读取:

  1. 已知数据组数 :使用 scanf 读取组数,然后循环处理每组数据。
  2. 特定符号结束 :使用 while 循环,直到输入特定字符结束。
  3. EOF结束 :使用 while 循环,检测输入是否结束。

这些方法能够帮助你灵活地处理输入数据,适应不同的需求和场景。

注解:

在格式字符串的开头添加空格,例如 scanf(" %c", &c),是为了忽略所有的前导空白字符(空格、换行符、制表符等)。这意味着在读取字符时,程序会自动跳过输入缓冲区中任何空白字符,直到找到一个非空白字符进行读取。这在处理用户输入时特别有用,可以防止用户意外输入空白字符导致的错误。

相关推荐
Scott9999HH5 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
码智社6 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海6 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖7 小时前
JDK 26 新特性详解
java·开发语言
马优晨8 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
人邮异步社区10 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大10 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai11 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
এ慕ོ冬℘゜11 小时前
前端基础:什么是时间戳?JS获取时间戳三种方法与实战用途
开发语言·前端·javascript
执明wa11 小时前
LayoutInflater详解: XML是如何变成View的?
android·xml·开发语言·android studio