C 语言编程教程

C 语言首页

C 语言基础

C 语言概述 C 语言特性 C 语言发展历史 C 语言下载安装和环境配置 C 语言程序结构 C 语言 Hello World C 编译过程 C 注释 C 标记 C 关键字 C 标识符 C 用户输入 C 基本语法 C 数据类型 C 变量 C 整数提升 C 类型转换 C 类型转换 C 布尔值

C 语言中的常量和文字

C 常量 C 字面量 C 转义序列 C 格式说明符

C 语言中的运算符

C 运算符 C 算术运算符 C 关系运算符 C 逻辑运算符 C 位运算符 C 赋值运算符 C 一元运算符 C 递增和递减运算符 C 三元运算符 C sizeof 运算符 C 运算符优先级 C 其他运算符

C 语言中的决策

C 决策 C if 语句 C if...else 语句 C 嵌套 if 语句 C switch 语句 C 嵌套 switch 语句

C 语言中的循环

C 循环 C While 循环 C For 循环 C Do...while 循环 C 嵌套循环 C 无限循环 C Break 语句 C Continue 语句 C goto 语句

C 语言中的函数

C 函数 C Main 函数 C 按值调用函数 C 按引用调用函数 C 嵌套函数 C 可变参数函数 C 用户定义函数 C 回调函数 C return 语句 C 递归

C 语言中的作用域规则

C 作用域规则 C 静态变量 C 全局变量

C 语言中的数组

C 数组 C 数组的属性 C 多维数组 C 将数组传递给函数 C 从函数返回数组 C 可变长度数组

C 语言中的指针

C 指针 C 指针和数组 C 指针的应用 C 指针运算 C 指针数组 C 指向指针的指针 C 将指针传递给函数 C 从函数返回指针 C 函数指针 C 指向数组的指针 C 指向结构体的指针 C 指针链 C 指针 vs 数组 C 字符指针和函数 C NULL 指针 C void 指针 C 悬垂指针 C 解引用指针 C Near、Far 和 Huge 指针 C 指针数组的初始化 C 指针与多维数组

C 语言中的字符串

C 字符串 C 字符串数组 C 特殊字符

C 语言的结构体和联合

C 结构体 C 结构体和函数 C 结构体数组 C 自引用结构 C 查找表 C 点 (.) 运算符 C 枚举(或 enum) C 结构填充和打包 C 嵌套结构 C 匿名结构和联合 C 联合 C Bit 位字段 C Typedef

C 语言中的文件处理

C 输入和输出 C 文件 I/O(文件处理)

C 语言中的预处理器

C 预处理器 C #pragma 编译指示 C 预处理器操作符 C 宏 C 头文件

C 语言中的内存管理

C 内存管理 C 内存地址 C 存储类

C 其他主题

C 错误处理 C 可变参数 C 命令执行 C 数学函数 C static 静态关键字 C 随机数生成 C 命令行参数

C 语言编程资源

C 语言问题与解答答案 C 语言快速指南 C 语言速查表 C 语言实用资源 C 语言讨论


C - 用户输入

C 语言中对用户输入的需求

每个计算机应用程序都会从​​用户那里接受特定的数据,并对其进行预定义的处理以生成输出。C 语言中没有可以读取用户输入的关键字。

C 编译器附带的标准库包含 stdio.h 头文件,其库函数 scanf() 最常用于从标准输入流接受用户输入。此外,stdio.h 库还提供了其他用于接受输入的函数。

示例

为了理解对用户输入的需求,请考虑以下 C 程序 -

#include <stdio.h>

int main(){
   int price, qty, ttl;

   price = 100;
   qty = 5;
   ttl = price*qty;

   printf("Total: %d", ttl);
   
   return 0;
}

输出

上述程序通过将客户购买的商品价格乘以数量来计算总购买金额。运行代码并检查其输出 -

Total:500

对于另一笔价格和数量值不同的交易,您需要编辑程序,输入值,然后重新编译并运行。每次都这样做非常繁琐。因此,必须提供在程序运行后将值赋给变量的功能。scanf() 函数会在运行时读取用户输入,并将值赋给变量。

C 用户输入函数:scanf()

C 语言将标准输入流识别为 stdin,并由标准输入设备(例如键盘)表示。 C 语言始终以字符形式从输入流读取数据。

scanf() 函数使用适当的格式说明符将输入转换为所需的数据类型。

Scanf() 的语法

以下是您在 C 语言中使用 scanf() 函数的方式 -

int scanf(const char *format, &var1, &var2, . . .);

scanf() 函数的第一个参数是一个格式字符串。它指示要解析用户输入的变量的数据类型。它后面跟着一个或多个指向变量的变量的指针。变量名以 & 为前缀。给出变量的地址。

用户输入格式说明符

格式字符串中使用以下格式说明符 -

格式说明符 类型
%c 字符
%d 有符号整数
%f 浮点值
%i 无符号整数
%l 或 %ld 或%li 长整型
%lf 双精度型
%Lf 长整型
%lu 无符号整型或无符号长整型
%lli 或 %lld 长整型
%llu 无符号长整型

示例:C 语言中的用户输入

回到前面的示例,我们将使用 scanf() 函数来接受"price"和"qty"的值,而不是为它们分配任何固定值。

#include <stdio.h>

int main(){

   int price, qty, ttl;

   printf("Enter price and quantity: ");
   scanf("%d %d", &price, &qty);

   ttl = price * qty;

   printf("Total : %d", ttl);
   
   return 0;
}

输出

当上述程序运行时,C 等待用户输入值 -

Enter price and quantity:

输入值并按下 Enter 键后,程序将继续执行后续步骤。

Enter price and quantity: 100 5
Total : 500

更重要的是,对于另一组值,您无需再次编辑和编译。只需运行代码,程序就会再次等待用户输入。这样,程序可以使用不同的输入运行任意次数。

Enter price and quantity: 150 10
Total : 1500

整数输入

已为有符号整数定义了%d格式说明符。以下程序读取用户输入并将其存储在整数变量num中。

示例:C语言中的整数输入

查看以下程序代码 -

#include <stdio.h>

int main(){
   
   int num;
   
   printf("Enter an integer: ");
   scanf("%d", &num);
   
   printf("You entered an integer: %d", num);
   
   return 0;
}

输出

运行代码并检查其输出 −

Enter an integer: 234
You entered an integer: 234

如果输入非数字值,输出将为"0"。

scanf() 函数可以将值读取到一个或多个变量中。输入值时,必须使用空格、制表符或 Enter 键分隔连续的值。

示例:C 语言中的多个整数输入

#include <stdio.h>

int main(){

   int num1, num2;

   printf("Enter two integers: ");
   scanf("%d %d", &num1, &num2);

   printf("You entered two integers : %d and %d", num1, num2);

   return 0;
}

输出

运行代码并检查其输出 −

Enter two integers: 45 57
You entered two integers : 45 and 57

或者

Enter two integers: 45
57

浮点数输入

对于浮点数输入,您需要使用 %f 格式说明符。

示例:C 语言浮点数输入

#include <stdio.h>

int main(){

   float num1;
   
   printf("Enter a number: ");
   scanf("%f", &num1);
   
   printf("You entered a floating-point number: %f", num1);
   
   return 0;
}

输出

运行代码并检查其输出 −

Enter a number: 34.56
You entered a floating-point number: 34.560001

示例:C 语言中的整数和浮点数输入

scanf() 函数可以读取不同类型的变量的输入。在以下程序中,用户输入存储在一个整数变量和一个浮点数变量中 -

#include <stdio.h>

int main(){

   int num1;
   float num2;
   
   printf("Enter two numbers: ");
   scanf("%d %f", &num1, &num2);
   
   printf("You entered an integer: %d a floating-point number: %6.2f", num1, num2);
   
   return 0;
}

输出

运行代码并检查其输出 −

Enter two numbers: 65 34.5678
You entered an integer: 65 a floating-point number:  34.57

字符输入

%c 格式说明符从键盘读取单个字符。但是,我们必须在格式字符串中的 %c 前添加一个空格。这是因为 %c 转换说明符不会自动跳过任何前导空格。

如果输入流中存在多余的换行符(例如,来自上一个条目),则 scanf() 调用将立即使用它。

scanf(" %c", &c);

格式字符串中的空格指示 scanf 跳过前导空格,并使用 %c 转换说明符读取第一个非空格字符。

示例:C 语言中的字符输入

请看以下示例 -

#include <stdio.h>

int main(){

   char ch;
   
   printf("Enter a single character: ");
   scanf(" %c", &ch);
   
   printf("You entered character : %c", ch);
   
   return 0;
}

输出

运行代码并检查其输出 −

Enter a single character: x
You entered character : x

示例:C 语言中的多个字符输入

以下程序读取两个 char 变量中以空格分隔的两个字符。

#include <stdio.h>

int main(){

   char ch1, ch2;
   
   printf("Enter two characters: ");
   scanf("%c %c", &ch1, &ch2);
   
   printf("You entered characters: %c and %c", ch1, ch2);
   
   return 0;
}

输出

运行代码并检查其输出 −

Enter two characters: x y
You entered characters: x and y

stdio.h 头文件还提供了 getchar() 函数。与 scanf() 不同,getchar() 没有格式字符串。此外,它读取单个按键,无需 Enter 键。

示例:使用 gets() 进行字符输入

以下程序将单个按键读入 char 变量 -

#include <stdio.h>

int main(){

   char ch;
   
   printf("Enter a character: ");
   ch = getchar();
   
   puts("You entered: ");
   putchar(ch);
   
   printf("
You entered character: %c", ch);
   
   return 0;
}

输出

运行代码并检查其输出 −

Enter a character: W
You entered:
W
You entered character: W

您还可以使用未格式化的 putchar() 函数来打印单个字符。

示例:读取字符序列

以下程序展示了如何读取一系列字符,直到用户按下 Enter 键 -

#include <stdio.h>

int main(){

   char ch;
   char word[10];

   int i = 0;
   printf("Enter characters. End by pressing the Enter key: ");
   
   while(1){
      ch = getchar();
      word[i] = ch;
      if (ch == '
')
         break;
      i++;
   }
   printf("
You entered the word: %s", word);
   
   return 0;
}

输出

运行代码并检查其输出 −

Enter characters. End by pressing the Enter key: Hello

You entered the word: Hello

字符串输入

还有一个 %s 格式说明符,用于将一系列字符读入 char 数组。

示例:使用 scanf() 进行字符串输入

以下程序接受来自键盘的字符串输入 -

#include <stdio.h>

int main(){

   char name[20];
   
   printf("Enter your name: ");
   scanf("%s", name);
   
   printf("You entered the name: %s", name);
   
   return 0;
}

输出

运行代码并检查其输出 −

Enter your name: Ravikant
You entered the name: Ravikant

C 使用空格作为分隔符。因此,如果您尝试输入包含空格的字符串,则只有空格之前的字符会被存储为值。

Enter your name: Ravikant Soni
You entered the name: Ravikant

gets() 函数 克服了这一限制。它是一个非格式化字符串输入函数。按下 Enter 键之前的所有字符都存储在变量中。

示例:使用 gets() 进行字符串输入

请看以下示例 -

#include <stdio.h>
#include <stdlib.h>

int main(){

   char name[20];
   
   printf("Enter your name: ");
   gets(name);
   
   printf("You entered the name: %s", name);
   
   return 0;
}

输出

运行代码并检查其输出 −

Enter your name: Ravikant Soni
You entered the name: Ravikant Soni

用户输入是 C 语言编程中应用程序的一个重要方面。本章通过不同的示例讲解了格式化和非格式化控制台输入函数 scanf()、getchar() 和 gets() 的用法。