【问题标题】:How to Point and Modify a Global Variable - C Programming如何指向和修改全局变量 - C 编程
【发布时间】:2018-07-14 02:15:21
【问题描述】:

我正在尝试在名为“userval”的函数中引用全局变量,然后根据用户输入修改这些变量。我需要在函数结束时返回这些变量吗?

我试图通过在主函数中打印这些全局变量来检查我的代码。但是,我不断收到随机字符。

下面是我的代码。

#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;
}

【问题讨论】:

  • 你不能从一个函数返回多个值,并且由于这些变量是全局的,你不需要返回任何东西,它们已经被改变了。您错误地使用了printf。您可能需要查看相关文档。

标签: c pointers main


【解决方案1】:

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);

【讨论】:

    【解决方案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 应该是一个多字节字符序列,以其初始移位状态开始和结束。格式由零个或多个指令组成:普通多字节字符(不是 %),它们原封不动地复制到输出流中; 和转换规范,每个都导致获取零个或多个后续参数,如果适用,根据相应的转换说明符转换它们,然后将结果写入输出流。

    对于printf,它是stdout,而不是任何输出流。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-15
      • 1970-01-01
      • 1970-01-01
      • 2012-10-23
      • 1970-01-01
      相关资源
      最近更新 更多