如何指向和修改全局变量-C编程

如何指向和修改全局变量-C编程,c,pointers,main,C,Pointers,Main,我试图在一个名为“userval”的函数中引用全局变量,然后根据用户输入修改这些变量。我是否需要在函数末尾返回这些变量 我试图通过在main函数中打印这些全局变量来检查代码。然而,我不断得到随机字符 下面是我的代码 #include <stdio.h> #include <string.h> #include <stdlib.h> // Global Constants #define MAX_PSWD_LEN 80 char password = 0; in

我试图在一个名为“userval”的函数中引用全局变量,然后根据用户输入修改这些变量。我是否需要在函数末尾返回这些变量

我试图通过在main函数中打印这些全局变量来检查代码。然而,我不断得到随机字符

下面是我的代码

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// Global Constants
#define MAX_PSWD_LEN 80
char password = 0;
int len = 0;
int upper = 0;
int lower = 0;
int digit = 0;
int special = 0;

int main(int argc, char *argv[]) {
  userval();
  printf(&len);
  printf(&upper);
  printf(&lower);
  printf(&digit);
  printf(&special);

}

int userval() {

printf("Please enter the minimum length of your password: \n");
scanf("%d", &len);
printf("Please enter the minimum number of uppercase letters in your password: \n");
scanf("%d", &upper);
printf("Please enter the minimum number of lowercase letters in your password: \n");
scanf("%d", &lower);
printf("Please enter the minimum number of decimal digit characters in your password: \n");
scanf("%d", &digit);
printf("Please enter the minimum number of special characters in your password: \n");
scanf("%d", &special);

printf("Thank you. \n");

return len, upper, lower, digit, special;
}
#包括
#包括
#包括
//全局常数
#定义最大PSWD长度80
字符密码=0;
int len=0;
整数上限=0;
整数下限=0;
整数位数=0;
int-special=0;
int main(int argc,char*argv[]){
userval();
printf&len;
printf(&upper);
printf(&lower);
printf(&数字);
printf&special;
}
int userval(){
printf(“请输入密码的最小长度:\n”);
scanf(“%d”和“len”);
printf(“请在密码中输入最小大写字母数:\n”);
scanf(“%d”及以上);
printf(“请在密码中输入最小小写字母数:\n”);
扫描频率(“%d”及更低);
printf(“请在密码中输入最小十进制数字字符数:\n”);
扫描频率(“%d”和数字);
printf(“请在密码中输入最小特殊字符数:\n”);
scanf(“%d”和“特殊”);
printf(“谢谢”。\n”);
返回长度,上,下,数字,特殊;
}

正确的使用方法是

printf("%p\n",(void*)&len);
但是这会打印变量的地址-很可能您想要打印变量的值。(在您的示例中也适用于其他int`变量)

使用
printf
时,第一个参数是格式字符串,其余参数是0或更多变量(由格式字符串指定)

从标准

intprintf(常量字符*限制格式,…)

这是
printf
函数的签名。关于格式说明符§

格式应为多字节字符序列,以初始移位状态开始和结束。该格式由零个或多个指令组成:普通的多字节字符(非%),这些字符将原封不动地复制到输出流中;和转换规范,每个规范都会获取零个或多个后续参数,根据相应的转换说明符转换这些参数(如果适用),然后将结果写入输出流


对于
printf
而言,它不是任何输出流,而是
stdout
,正确的使用方法是

printf("%p\n",(void*)&len);
但是这会打印变量的地址-很可能您想要打印变量的值。(在您的示例中也适用于其他int`变量)

使用
printf
时,第一个参数是格式字符串,其余参数是0或更多变量(由格式字符串指定)

从标准

intprintf(常量字符*限制格式,…)

这是
printf
函数的签名。关于格式说明符§

格式应为多字节字符序列,以初始移位状态开始和结束。该格式由零个或多个指令组成:普通的多字节字符(非%),这些字符将原封不动地复制到输出流中;和转换规范,每个规范都会获取零个或多个后续参数,根据相应的转换说明符转换这些参数(如果适用),然后将结果写入输出流


它不是任何输出流,而是
printf的
stdout
printf
函数不是这样工作的

第一个参数是格式字符串。它包含要打印的任何静态文本以及要打印的任何值的格式说明符

例如,如果只想打印后跟换行符的整数,则要使用的格式字符串是
%d\n“
,其中
%d
是整数的格式说明符,
\n
是换行符

任何后续参数都将用于填充格式。对于要打印的值,可以执行以下操作:

printf("%d\n", len);
printf("%d\n", upper);
printf("%d\n", lower);
printf("%d\n", digit);
printf("%d\n", special);

这不是
printf
函数的工作方式

第一个参数是格式字符串。它包含要打印的任何静态文本以及要打印的任何值的格式说明符

例如,如果只想打印后跟换行符的整数,则要使用的格式字符串是
%d\n“
,其中
%d
是整数的格式说明符,
\n
是换行符

任何后续参数都将用于填充格式。对于要打印的值,可以执行以下操作:

printf("%d\n", len);
printf("%d\n", upper);
printf("%d\n", lower);
printf("%d\n", digit);
printf("%d\n", special);

一个函数不能返回多个值,因为这些变量是全局变量,所以不需要返回任何内容,它们已经被更改了。您不正确地使用了
printf
。您可能需要查看相关文档。您不能从一个函数返回多个值,而且由于这些变量是全局变量,您不需要返回任何内容,它们已经被更改。您不正确地使用了
printf
。您可能需要查看相关文档。