写一个C语言程序,要求用户输入指定位数数字,否则重新输入
时间: 2024-02-28 10:54:31 浏览: 72
下面是一个示例程序,要求用户输入4位数字,如果输入的不是4位数字,则会提示用户重新输入,直到输入正确为止。
```
#include <stdio.h>
int main() {
int num = 0;
int digit_count = 0;
int temp_num = 0;
do {
printf("请输入4位数字:\n");
scanf("%d", &num);
// 计算数字的位数
temp_num = num;
digit_count = 0;
while (temp_num > 0) {
digit_count++;
temp_num /= 10;
}
// 判断位数是否正确
if (digit_count != 4) {
printf("输入的数字不是4位,请重新输入。\n");
}
} while (digit_count != 4);
printf("输入的数字为:%d\n", num);
return 0;
}
```
在上面的代码中,使用了一个do-while循环来反复读取用户输入的数字,每次读取都会计算数字的位数。如果位数不是4,则会提示用户重新输入,直到输入正确为止。最后通过printf函数输出输入的数字。
相关问题
输入一个3 位数,计算该数各位上的数字之和,如果在[1,12]之内,则输出与和数相对应的月份的英文名称,否则输出***。用c语言指针来完成...
好的,我来为您解答。以下是用 C 语言指针实现的程序代码:
```c
#include <stdio.h>
void sum_and_month(int num, char *month);
int main() {
int num;
char month[10];
printf("请输入一个三位数:");
scanf("%d", &num);
sum_and_month(num, month);
printf("该数各位上的数字之和为:%d\n", num % 10 + num / 10 % 10 + num / 100);
printf("对应的月份是:%s\n", month);
return 0;
}
void sum_and_month(int num, char *month) {
int sum = num % 10 + num / 10 % 10 + num / 100;
if (sum >= 1 && sum <= 12) {
switch (sum) {
case 1:
sprintf(month, "January");
break;
case 2:
sprintf(month, "February");
break;
case 3:
sprintf(month, "March");
break;
case 4:
sprintf(month, "April");
break;
case 5:
sprintf(month, "May");
break;
case 6:
sprintf(month, "June");
break;
case 7:
sprintf(month, "July");
break;
case 8:
sprintf(month, "August");
break;
case 9:
sprintf(month, "September");
break;
case 10:
sprintf(month, "October");
break;
case 11:
sprintf(month, "November");
break;
case 12:
sprintf(month, "December");
break;
default:
break;
}
} else {
sprintf(month, "***");
}
}
```
程序中定义了一个 `sum_and_month` 函数,用于计算输入的数字的各位数字之和,并将对应的月份名称存储在传入的字符串指针 `month` 中。程序中使用了 `sprintf` 函数来将字符串格式化输出到指定的缓冲区中。最后在 `main` 函数中输出各位数字之和以及对应的月份名称。
希望能对您有所帮助!
请用C语言写一个简易登陆代码,功能界面有3个功能,分别为登陆 注册 退出。选择登陆功能后,输入用户名和账户和密码可以登陆上自己的账号,若有误则提示报错,并重新输入;选择注册功能时,可以输入自己的用户名(可以使用汉字,字母,数字,符号,不得超过10位),然后输入密码(密码只能由数字和字母组成,且不超过6位),且密码需要第二次确认,随后注册成功,随机生成一个6位数的账号,每次注册所产生的用户名,账号,密码等数据需要保存,以便登陆时使用。选择退出功能时,退出
以下是一个简易的登陆系统代码,包含登陆、注册和退出三个功能。请注意,该代码仅作为参考,实际应用中需要加上更多的安全检查和数据存储功能。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX_USER_NUM 100
#define MAX_USER_NAME_LEN 10
#define MAX_PASSWORD_LEN 6
typedef struct User {
char name[MAX_USER_NAME_LEN + 1];
int account;
char password[MAX_PASSWORD_LEN + 1];
} User;
User users[MAX_USER_NUM];
int user_num = 0;
int is_valid_name(const char* name) {
int len = strlen(name);
if (len == 0 || len > MAX_USER_NAME_LEN) return 0;
for (int i = 0; i < len; i++) {
if (!((name[i] >= '0' && name[i] <= '9') ||
(name[i] >= 'a' && name[i] <= 'z') ||
(name[i] >= 'A' && name[i] <= 'Z') ||
(name[i] >= 0x4E00 && name[i] <= 0x9FA5))) {
return 0;
}
}
return 1;
}
int is_valid_password(const char* password) {
int len = strlen(password);
if (len == 0 || len > MAX_PASSWORD_LEN) return 0;
for (int i = 0; i < len; i++) {
if (!((password[i] >= '0' && password[i] <= '9') ||
(password[i] >= 'a' && password[i] <= 'z') ||
(password[i] >= 'A' && password[i] <= 'Z'))) {
return 0;
}
}
return 1;
}
int find_user(const char* name) {
for (int i = 0; i < user_num; i++) {
if (strcmp(users[i].name, name) == 0) {
return i;
}
}
return -1;
}
void register_user() {
char name[MAX_USER_NAME_LEN + 1];
char password[MAX_PASSWORD_LEN + 1];
char confirm[MAX_PASSWORD_LEN + 1];
printf("Please enter your username (up to %d characters):\n", MAX_USER_NAME_LEN);
scanf("%s", name);
if (!is_valid_name(name)) {
printf("Invalid username!\n");
return;
}
if (find_user(name) != -1) {
printf("Username already exists!\n");
return;
}
printf("Please enter your password (up to %d characters, only letters and digits allowed):\n", MAX_PASSWORD_LEN);
scanf("%s", password);
if (!is_valid_password(password)) {
printf("Invalid password!\n");
return;
}
printf("Please confirm your password:\n");
scanf("%s", confirm);
if (strcmp(password, confirm) != 0) {
printf("Passwords don't match!\n");
return;
}
User user;
strcpy(user.name, name);
user.account = rand() % 900000 + 100000;
strcpy(user.password, password);
users[user_num++] = user;
printf("Registration successful! Your account is %d.\n", user.account);
}
void login() {
char name[MAX_USER_NAME_LEN + 1];
char password[MAX_PASSWORD_LEN + 1];
printf("Please enter your username:\n");
scanf("%s", name);
int index = find_user(name);
if (index == -1) {
printf("User does not exist!\n");
return;
}
printf("Please enter your password:\n");
scanf("%s", password);
if (strcmp(users[index].password, password) != 0) {
printf("Wrong password!\n");
return;
}
printf("Login successful! Welcome, %s.\n", name);
}
void display_menu() {
printf("Welcome to the login system!\n");
printf("Please select an option:\n");
printf("1. Login\n");
printf("2. Register\n");
printf("3. Exit\n");
}
int main() {
srand((unsigned)time(NULL));
int choice;
do {
display_menu();
scanf("%d", &choice);
switch (choice) {
case 1:
login();
break;
case 2:
register_user();
break;
case 3:
printf("Goodbye!\n");
break;
default:
printf("Invalid choice!\n");
}
} while (choice != 3);
return 0;
}
```
在以上代码中,我们定义了一个 `User` 结构体来保存用户的信息,包括用户名、账号和密码。我们使用了一个 `users` 数组来保存所有注册的用户,使用一个 `user_num` 变量来记录当前有多少个用户。在程序启动时,我们需要调用 `srand` 函数来初始化随机数生成器,以便在注册时随机生成账号。
在 `is_valid_name` 和 `is_valid_password` 函数中,我们分别检查用户名和密码是否合法,合法的用户名可以包括汉字、字母、数字和符号,但长度不得超过 `MAX_USER_NAME_LEN` 个字符;合法的密码只能由字母和数字组成,但长度不得超过 `MAX_PASSWORD_LEN` 个字符。
在 `find_user` 函数中,我们遍历所有已注册的用户,查找指定用户名的用户是否存在。若存在,返回其在 `users` 数组中的下标,否则返回 `-1`。
在 `register_user` 函数中,我们首先要求用户输入用户名,如果不合法或者已存在,则提示报错并退出;接着要求用户输入密码,并进行检查,如果不合法或者密码不一致,则提示报错并退出;最后随机生成账号,并将用户信息保存到 `users` 数组中。
在 `login` 函数中,我们要求用户输入用户名和密码,如果用户名不存在或者密码不正确,则提示报错并退出,否则登录成功。
在 `display_menu` 函数中,我们显示程序的菜单,让用户选择要进行的操作。
在 `main` 函数中,我们在程序启动时调用 `srand` 函数,然后进入菜单循环,让用户选择要进行的操作。若用户选择退出,则退出循环,结束程序。
阅读全文
相关推荐














