我正在撰寫一個程式,用戶輸入數字,程式將找到 MAX 和 MIN 以及這些數字的位置。我想讓用戶選擇讓程式使用rand().
它幾乎完美地作業:程式將找到帶有位置的 MAX 數字,但是在列印帶有位置的 MIN 數字時會出現問題——它總是列印數字 8 和位置 1。
問題出在哪兒?
這是我的代碼:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct elementposition {
int min;
int max;
int positionMax;
int positionMin;
} elementposition;
int main() {
struct elementposition minmax;
srand(time(NULL));
int a[500], i;
int c = sizeof(a) / sizeof(a[0]);
char y;
printf("How many numbers you want to enter: ");
scanf("%d", &c);
minmax.positionMax = minmax.positionMin = 0;
printf("Want to fill with random numbers? (Y/N)");
scanf(" %c", &y);
if (y == 'Y' || y == 'y') {
for (i = 0; i < c; i ) {
a[i] = rand() % 10000 1;
if (minmax.max < a[i]) {
minmax.max = a[i];
minmax.positionMax = i;
}
if (minmax.min > a[i]) {
minmax.min = a[i];
minmax.positionMin = i;
}
}
for (i = 0; i < c; i ) {
printf("Number #%d: %d\n", i 1, a[i]);
}
} else {
printf("------------------------------------ \n");
printf("Enter (%d) numbers: \n", c);
scanf("%d", &a[0]);
minmax.max = minmax.min = a[0];
for (i = 1; i < c; i ) {
scanf("%d", &a[i]);
if (minmax.max < a[i]) {
minmax.max = a[i];
minmax.positionMax = i;
}
if (minmax.min > a[i]) {
minmax.min = a[i];
minmax.positionMin = i;
}
}
}
printf("\nMax number is %d, number position %d. \n", minmax.max, minmax.positionMax 1);
printf("Min number is %d, number position %d. \n", minmax.min, minmax.positionMin 1);
printf("------------------------------------ \n");
getch();
return 0;
}
uj5u.com熱心網友回復:
在初始化它們之前使用minmax.min和。這里找到分鐘的問題可能是,發生于initialy包含值,并且所有值都較大。minmax.max minmax.min 8
常見的方法是將 min 初始化為可能的最高值,將 max 初始化為最低值。當您使用int值時:
struct elementposition minmax = { INT_MAX, INT_MIN };
應該夠了。
uj5u.com熱心網友回復:
您永遠不會初始化,minmax.min也不會minmax.max在隨機情況下。代碼具有未定義的行為,因為它依賴于未初始化的值,這些值可能是任何東西,包括一些罕見架構上的陷阱值。
您應該將輸入/生成階段與掃描階段分開,并為此使用一個公共回圈。還要檢查它c是否為正且不超過陣列的長度。
這是一個修改后的版本:
#include <stdio.h>
#include <stdlib.h>
typedef struct elementposition {
int min;
int max;
int positionMax;
int positionMin;
} elementposition;
int main() {
struct elementposition minmax;
int a[500];
int i, count, len = sizeof(a) / sizeof(a[0]);
char y = 'y';
printf("How many numbers you want to enter: ");
if (scanf("%d", &count) != 1 || count < 1 || count > len) {
printf("invalid count\n");
return 1;
}
printf("Want to fill with random numbers? (Y/N)");
scanf(" %c", &y);
if (y == 'Y' || y == 'y') {
srand(time(NULL));
for (i = 0; i < count; i ) {
a[i] = rand() % 10000 1;
printf("Number #%d: %d\n", i 1, a[i]);
}
} else {
printf("Enter (%d) numbers:\n", c);
for (i = 0; i < count; i ) {
if (scanf("%d", &a[i]) != 1) {
printf("invalid input\n");
return 1;
}
}
}
minmax.positionMax = minmax.positionMin = 0;
minmax.max = minmax.min = a[0];
for (i = 1; i < count; i ) {
if (minmax.max < a[i]) {
minmax.max = a[i];
minmax.positionMax = i;
}
if (minmax.min > a[i]) {
minmax.min = a[i];
minmax.positionMin = i;
}
}
printf("------------------------------------\n");
printf("Max number is %d, number position %d.\n", minmax.max, minmax.positionMax 1);
printf("Min number is %d, number position %d.\n", minmax.min, minmax.positionMin 1);
printf("------------------------------------\n");
getch();
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/341252.html
上一篇:更新函式中的字串陣列
