【发布时间】:2020-11-17 00:10:54
【问题描述】:
我尝试在 Visual Studio 中构建后运行,而没有任何警告或错误。
#include <stdio.h>
#include <stdlib.h>
int e = 0;
int num = 0;
int a = 0;
int n = 0;
int c = 0;
static int factorial();
int factorial(int e){
if (e == 0)
return 1;
else if (e == 1)
return 1;
else
return e * factorial(e - 1);
}
int main() {
int k = 0;
int i = 0;
int j = 0;
int f = 0;
int r = 0;
printf_s(" Enter a number for length of string");
scanf_s("%d", &n);
printf_s(" Enter a number for choice of string");
scanf_s("%d", &k);
f = factorial(n) / (factorial(n - 2) * 2);
char **arr = (char **)malloc(n * sizeof(char *));
for (i = 0; i < n; i++){
arr[i] = (char*)malloc(f * sizeof(char));
}
for (i = 0; i < n; i++){
for (j = 0; j < f; j++) {
*(*(arr + i) + j) = '\0';
}
}
for (i = 1; i < n; i++){
num = 0;
for (j = 0; j < i; j++){
while (num <= n){
if ((num == j) || (num == i))
arr[r][num] = 'b';
else
arr[r][num] = 'a';
}
}
r++;
}
for (i = 0; i < n; i++) {
for j = 0; j < f; j++) {
printf_s("%c ", arr[j][i]);
}
}
}
输入后控制失控。 空白字符、换行符、任何字符、字符串或乱码不会产生任何 区别 。我也对调用阶乘函数有疑问 像一个表达式。
【问题讨论】:
-
我冒昧地对您的代码进行了格式化以使其更具可读性。 “输入后控制失控” - 这是一个令人沮丧的模糊描述。你提供了什么输入,行为是什么?程序崩溃了吗?你没有得到预期的输出吗?它没有终止吗?
-
我立即看到的一个问题是你没有正确终止你的字符串 - 在你写
'a'和'b'到arr[r][num]的中间循环中,你需要循环whilenum严格小于n(while (num < n)) 并且循环结束时写入arr[r][num] = 0;。 -
我怀疑您是否可以毫无错误地构建此程序。
for j = 0; j < f; j++) {行不应该编译。您是否忘记在while (num <= n){的正文中增加num?num = 0;在外部for循环中是否正确,还是应该在while循环之前的内部循环中? -
知道
factorial(n) / (factorial(n - 2) * 2)与n*(n-1)/2相同可能会有所帮助。更简单,不是吗? -
@MauryaMoharar:您可以通过单击分数下方的灰色复选标记来接受其中一个答案。