代码之家  ›  专栏  ›  技术社区  ›  Thomas Butterfield

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

  •  1
  • Thomas Butterfield  · 技术社区  · 7 年前

    我试图在一个名为“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;
    }
    
    2 回复  |  直到 7 年前
        1
  •  2
  •   dbush    7 年前

    这不是 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
  •  2
  •   user2736738    7 年前

    正确的使用方法是

    printf("%p\n",(void*)&len);
    

    但是 这将打印变量的地址 -您很可能希望打印变量的值。(在您的示例中,也适用于其他int`变量)。

    printf("%d\n",len);
    

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

    来自标准

    int printf(const char * restrict format, ...);

    这是 打印F 作用关于格式说明符§ 7.21.6.1

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

    它不是任何输出流 stdout 对于 打印F .