我正在尝试在名为“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;
}
答案 0 :(得分:2)
使用它的正确方法是
printf("%p\n",(void*)&len);
但是这会打印变量的地址 - 很可能你想打印变量的值。 (在您的示例中也包含其他int`变量。)
printf("%d\n",len);
使用printf
时,第一个参数是格式字符串,其余参数是0或更多变量(由格式字符串决定)。
从标准
int printf(const char * restrict format, ...);
这是printf
函数的签名。同样关于格式说明符§7.21.6.1
format
应为多字节字符序列,以其初始移位状态开始和结束。格式由零个或多个指令组成:普通的多字节字符(不是%),它们不加改变地复制到输出流中; 和转换规范,每个参数都会导致获取零个或多个后续参数,根据相应的转换说明符转换它们(如果适用),然后将结果写入输出流。
stdout
代替任何输出流,printf
。
答案 1 :(得分:2)
printf
功能不起作用。
第一个参数是格式字符串。它包含您要打印的任何静态文本以及要打印的任何值的格式说明符。
例如,如果您只想打印一个整数后跟换行符,那么您将使用的格式字符串是"%d\n"
,其中%d
是整数的格式说明符{{1}是一个换行符。
任何后续参数都用于填写格式。对于要打印的值,您将执行以下操作:
\n