У меня есть небольшое задание, связанное с C, но я не могу швы, чтобы заполнить массив, на который я выделил память. Код выглядит так.
#include<stdio.h>
#include<stdlib.h>
int main(){
int *x, *y, n, m, i;
printf("Enter lenght of arrays x and y (separated by space): ");
scanf("%d%d", &n, &m); fflush(stdin);
if (x = (int*)malloc(sizeof(int) * n) == NULL){
fprintf(stderr, "Error!\n");
exit(1);
}
if (y = (int*)malloc(sizeof(int) * m) == NULL){
fprintf(stderr, "Error!\n");
exit(1);
}
printf("Enter %d values for X array (separated by space) ", n);
for (i = 0; i < n; i++)
scanf("%d", x + i);
fflush(stdin);
printf("Enter %d values for Y array (separated by space): ", m);
for (i = 0; i < m; i++)
scanf("%d", y + i);
} //the two for were originally in a function, I tried using the code like this as well
return 0;
}
Я также попытался запустить scanf ("% d", x [i]); но ничего не работает. Каждый раз, когда я нажимаю Enter после ввода массива для X, программа вылетает из строя. Кстати, изначально нет fflush (stdin), я добавил их, потому что я думал, что вход принял \0 как одно из значений и создал ошибки.
Спасибо за чтение! :)
Код имеет кучу неустановленных фигурных скобок и скобок, особенно в операторах if. Перед выполнением сравнения необходимо скопировать задания в скобках, иначе они будут неправильно назначены. Попробуйте это, он собрал и работал для меня:
#include<stdio.h>
#include<stdlib.h>
int main(){
int *x, *y, n, m, i;
printf("Enter lenght of arrays x and y (separated by space): ");
scanf("%d%d", &n, &m);
if ((x = (int*)malloc(sizeof(int) * n)) == NULL){
fprintf(stderr, "Error!\n");
exit(1);
}
if ((y = (int*)malloc(sizeof(int) * m)) == NULL){
fprintf(stderr, "Error!\n");
exit(1);
}
printf("Enter %d values for X array (separated by space) ", n);
for (i = 0; i < n; i++)
scanf("%d", x + i);
printf("Enter %d values for Y array (separated by space): ", m);
for (i = 0; i < m; i++)
scanf("%d", y + i);
//the two for were originally in a function, I tried using the code like this as well
return 0;
}
И, как все говорят, не используйте fflush (stdin)
Использование fflush(stdin)
, вероятно, вызывает крах, поскольку это неопределенное поведение в стандартном C.
Взгляните на этот ответ, что такое использование fflush (stdin) в c-программировании
fflush(stdin)
поскольку это неопределенное поведение, что в основном означает «не гарантированно работает». Это может быть неработоспособность в вашей системе, но, скорее всего, однажды это вызовет у кого-то сильную боль, потому что в его конкретной конфигурации произойдет сбой.
Я попытался скомпилировать программу с Visual Studio 2013 и получил 2 ошибки в строках с malloc: ошибка C2440: '=': не может преобразовать из 'bool' в 'int *' После того, как я зафиксировал обе строки на
if ((x = (int*)malloc(sizeof(int) * n)) == NULL){
или
if (x = (int*)malloc(sizeof(int) * n)){
программа работает без проблем.
Я не понимаю, почему вы можете скомпилировать код, но он делает следующее:
compare (int *) malloc (sizeof (int) * n) == Результат NULL является ложным и теперь устанавливает y = false, а y не указывает на выделенный массив.
fflush(stdin);
является неопределенным поведением. Также ........