#include <stdio.h>
int main(int argc, char **argv)
{
//创建几个存储个人信息的二维数组并初始化
char name[][20] = {"eiop", "xiaoqing", "xiaofang"};
char sex[][20] = {"M", "W", "M"};
char height[][20] = {"180", "165", "177"};
char score[][20] = {"96.4", "93.52", "44.33"};
int rows = sizeof(name) / sizeof(name[0]); // 获取二维数组的行数
// printf("你有%d个学生信息\n",rows);
while (1)
{
printf("=============================\n");
printf("输入1:添加学生用户信息\n");
printf("输入2:查看所有学生信息\n");
printf("输入q:退出程序\n");
printf("=============================\n");
char n = 0;
scanf("%c", &n);
while (getchar() != '\n'); // 清空缓冲区
if (n == 'q') // 如果输入了q则退出循环
break;
switch (n)
{
case '1':
printf("请输入添加学生的姓名\n");
scanf("%s", name[rows]);
while (getchar() != '\n');
printf("请输入添加学生的性别\n");
scanf("%s", sex[rows]);
while (getchar() != '\n');
printf("请输入添加学生的身高\n");
scanf("%s", height[rows]);
while (getchar() != '\n');
printf("请输入添加学生的分数\n");
scanf("%s", score[rows]);
printf("输入完成!\n");
while (getchar() != '\n');
rows++; // 更新行数
break;
case '2':
/*
%-10s,%-8 .... 是一个格式控制符,用于按照左对齐的方式打印字符串,
并且限制宽度为10,8...个字符。这样可以在输出对齐的同时,
指定字符串的显示宽度。
*/
printf("所有学生信息如下:\n");
printf("===================================\n");
printf("%-10s %-8s %-9s %-6s\n", "name", "sex", "height", "score"); //
printf("===================================\n");
for (int i = 0; i < rows; i++)//遍历打印数组内容
{
printf("%-11s %-8s %-9s %-6s\n", name[i], sex[i], height[i], score[i]);
}
printf("\n");
break;
default:
printf("输入错误,请重新输入!\n");
break;
}
}
return 0;
}
二维数组:
char name[][20] = {"eiop", "xiaoqing", "xiaofang"};
char sex[][20] = {"M", "W", "M"};
char height[][20] = {"180", "165", "177"};
char score[][20] = {"96.4", "93.52", "44.33"};
char name[][20] = {"eiop", "xiaoqing", "xiaofang"};
char name[3][20] = {"eiop", "xiaoqing", "xiaofang"};
这两个是存储的数据是相同的,不同的是name[3][20]已经规定了最多能存储3行的内容。
3表示 说它只能够存储"eiop", "xiaoqing", "xiaofang"这三个字符串,
20表示的字符数组的长度为 20,也就是名字的长度不能超过20。
清空缓冲区:
case '1':
printf("请输入添加学生的姓名\n");
scanf("%s", name[rows]);
while (getchar() != '\n');
printf("请输入添加学生的性别\n");
scanf("%s", sex[rows]);
while (getchar() != '\n');
break;
在这段代码中,使用
while (getchar() != '\n');
是为了清空输入缓冲区。在使用
scanf
函数接收字符串输入时,如果用户输入的内容超过了指定的长度,可能会导致多余的字符残留在输入缓冲区中。而下一次读取用户输入时,这些多余的字符可能会被误读。为了解决这个问题,我们使用
while (getchar() != '\n');
语句读取并丢弃输入缓冲区中的所有字符,直到遇到换行符\n
为止。这样可以确保在下一次读取用户输入时,输入缓冲区中不会有多余的字符。这种做法通常在使用
scanf
函数后紧跟着读取字符输入时会比较有用,以确保输入缓冲区是干净的、没有残留。
格式控制符(-):
printf("所有学生信息如下:\n");
printf("===================================\n");
printf("%-10s %-8s %-9s %-6s\n", "name", "sex", "height", "score"); //
printf("===================================\n");
for (int i = 0; i < rows; i++)//遍历打印数组内容
{
printf("%-11s %-8s %-9s %-6s\n", name[i], sex[i], height[i], score[i]);
}
输出结果:
================================
name sex height score
================================
eiop M 180 96.4
xiaoqing W 165 93.52
xiaofang M 177 44.33
添加
-
标志会改变格式控制符的对齐方式,具体取决于使用的格式控制符和标志。在 C 语言中,以下是常见的格式控制符及其对齐方式:
%s
:字符串的对齐方式可以通过添加-
标志实现左对齐,例如%10s
表示右对齐,%-10s
表示左对齐。%d
或%i
:整数值的对齐方式是默认的右对齐,可以通过添加-
标志实现左对齐,例如%5d
表示右对齐,%-5d
表示左对齐。%f
:浮点数的对齐方式是默认的右对齐,可以通过添加-
标志实现左对齐,例如%8.2f
表示宽度为 8 的右对齐,%-8.2f
表示宽度为 8 的左对齐。%c
:字符的对齐方式是无效的,因为字符只占用一个位置。通过添加
-
标志,可以改变格式控制符的对齐方式,使得输出更符合需求,例如在表格输出或对齐需求更严格的场景中。