生成随机4位代码时,单个元素可打印但数组整体输出为空
C语言随机4位代码数组打印无内容问题解决
编写了一段生成随机4位代码的C语言程序,单个数字能正确打印,但尝试打印整个数组时无内容输出。代码及运行结果如下:
#include <stdio.h> #include <stdlib.h> #define CODE_LENGTH 4 void generate_code(int code[]) { int i; for(i = 0; i < CODE_LENGTH; i++) { int x = rand() % 10; printf("\n%i", x); code[i] = x; } printf("\nCode: %n", code); } int main(void) { int code[4]; generate_code(code); return 0; }
运行输出:
1 7 4 0 Code:
问题分析
核心错误是误用了%n格式符:%n的作用是将当前已打印的字符总数写入到对应的指针变量中,完全不是用来输出数组内容的。这里传入数组名code(会退化为指针),但%n不会输出任何可见内容,只会修改指针指向的变量,因此Code:后无输出。
修正方案
要打印整个数组,需要遍历数组的每个元素逐个输出。同时补充随机数种子初始化,避免每次运行生成相同的随机序列。修正后的代码如下:
#include <stdio.h> #include <stdlib.h> #include <time.h> // 用于初始化随机数种子 #define CODE_LENGTH 4 void generate_code(int code[]) { int i; // 初始化随机数种子,保证每次运行生成不同的随机序列 srand((unsigned int)time(NULL)); for(i = 0; i < CODE_LENGTH; i++) { int x = rand() % 10; printf("\n%i", x); code[i] = x; } // 遍历数组打印完整代码 printf("\nCode: "); for(i = 0; i < CODE_LENGTH; i++) { printf("%i", code[i]); } printf("\n"); } int main(void) { int code[CODE_LENGTH]; generate_code(code); return 0; }
内容的提问来源于stack exchange,提问作者Nebelmonster
相关产品推荐
相关产品推荐

