【发布时间】:2020-03-20 17:48:31
【问题描述】:
程序做什么:
我正在制作一个程序来显示用户输入了多少次数字。如果输入的数字小于 1,它将停止询问值。
SCREENSHOT AND EXAMPLE OF THE PROGRAM
我能够通过将数组“count”的值初始化为 100 来创建程序。 SCREENSHOT OF WHAT I DID。
这个程序的问题是它只接受 100 之前的值。它不会接受超过 100 的值。如果输入了超过 100 个值,这是一个屏幕截图:SCREENSHOT OF MORE THAN 100
问题
这就是我希望 realloc() 发挥作用的地方。我希望根据输入的最高值来更改 malloc() 的大小,这样使用 realloc() 会更加灵活。 SCREENSHOT OF WHAT I CHANGED IN THE PROGRAM TO USE REALLOC()
但是,这样做会破坏程序。 SCREENSHOT OF THE NEW OUTPUT OF THE PROGRAM
请帮帮我。
我的计划
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <stdbool.h>
main()
{
//DECLARATION OF VARIABLES
int i, j, k, highestValue=1, size=1;
int* input = (int*)calloc(size, sizeof(int));
int* count = (int*)calloc(highestValue, sizeof(int));
bool iCondition = true;
//USER INPUT
for (i=0; iCondition==true; i++)
{
//GETS USER INPUT
printf("Enter a number: ");
scanf("%d", &input[i]);
//CHECKS IF THE NUMBER ENTERED IS A HIGH NUMBER
if (highestValue<input[i]){
highestValue = input[i];
count = realloc(count, highestValue * sizeof(int));
}
//CHECKS HOW MANY TIMES THE NUMBER HAS BEEN ENTERED
bool jCondition = true;
for(j=0; jCondition==true; j++)
{
if (input[i] == j){
count[j-1]++;
jCondition=false;
}
}
//ENDS THE LOOP IF THE ENTERED NUMBER IS LESS THAN 1
if(input[i] < 1)
iCondition = false;
//IF NOT, THIS WILL REALLOCATE/CHANGE ARRAY SIZE BY ADDING +1!!
else{
size++;
input = realloc(input, size * sizeof(int));
}
}
//PRINTS OUTPUT | USES THE HIGHESTVALUE AS THE CONDITIONAL EXPRESSION FOR FLEXIBILITY
for (i=0; i<=highestValue; i++)
{
//PRINTS ALL NUMBER THAT IS NOT EQUAL TO ZERO(0)
if (count[i] != 0)
printf("\n %d was entered %d time/s ", i+1, count[i]);
}
getch();
}
【问题讨论】:
-
为什么要发文字截图?只需发布文本。
-
我可以看到至少 一个 特定输入会导致未定义行为的地方。您也有使用未初始化和不确定值的地方。
-
至于帮助您解决问题:请学习如何使用调试器逐语句逐句执行您的代码。如果您对编程非常认真,那么能够使用调试器是一项至关重要的技能。
-
@KamilCuk 抱歉,下次我一定会这样做!谢谢!
-
您可以使用问题下方的
edit按钮将图片链接替换为相关文字。