Одномерный массив. Простые числа. "Предупреждения" и "замечания" при компиляции в gcc под linux - C (СИ)
Формулировка задачи:
Доброго времени суток. Нужна помощь.
Не могу разобраться, почему не компилируется.
задача:
gcc ругается:
Спасибо!
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "my.c" /* my.c требуется написать по заданию. в нем void функции ввода/вывода одномерного массива. содержимое файла ниже. */ main (int argc, char* argv[]) { int N, A[N]; logo(); if (argc<3) { puts("Программа находит простые числа в одномерном целочисленном массиве и выводит их номера."); puts("Для запуска используйте аргументы командной строки:"); puts("./03 N r -- автоматическое задание массива размером N;"); puts("./03 N h -- ручное задание массива размером N;"); puts(", где N - целое число."); puts("Пример:"); puts("./03 10 r - автоматическое задание массива размером 10."); } if (argc=2) { N=atoi(argv[1]); if (N<2||N>40) { puts("Ошибка.\nКол-во элементов должно быть больше 1 и меньше 40"); exit(1); } if (strcmp(argv[2], "r")==0) { printf("Был выбрал АВТОМАТИЧЕСКИЙ способ заполнения массива размером %d\n", N); GetsArrayRand(A[N], N); } if (strcmp(argv[2], "h")==0) { printf("Был выбрал РУЧНОЙ способ заполнения массива размером %d\n", N); GetsArrayHand(A[N], N); } } puts("Исходный массив:\n"); PutsArray(A[N], N); }// Функция рандомного ввода массива void GetsArrayRand(int A[], int N) { int i; srand(time(NULL)); for (i=1; i<=N; i++) A[i]=rand()%100; } // Функция ручного ввода массива void GetsArrayHand(int A[], int N) { int i; char buffer[10]; for (i=1; i<=N; i++) { printf("Введите A[%d]=", i); fgets(buffer,5,stdin); A[i]=atoi(buffer); } } // Вывод массива void PutsArray(int A[], int N) { int i; for (i=1; i<=N; i++) { printf("%d ", A[i]); } puts(" "); }
03.c: В функции «main»:
03.c:53:7: предупреждение: при передаче аргумента 1 «GetsArrayRand» целое преобразуется в указатель без приведения типа [по умолчанию включена]
03.c:7:6: замечание: expected «int *» but argument is of type «int»
03.c:57:7: предупреждение: при передаче аргумента 1 «GetsArrayHand» целое преобразуется в указатель без приведения типа [по умолчанию включена]
03.c:15:6: замечание: expected «int *» but argument is of type «int»
03.c:61:1: предупреждение: при передаче аргумента 1 «PutsArray» целое преобразуется в указатель без приведения типа [по умолчанию включена]
03.c:25:6: замечание: expected «int *» but argument is of type «int»
Не по теме:
Также буду благодарен за небольшую подсказку, как лучше организовать поиск простых чисел в массиве.
Решение задачи: «Одномерный массив. Простые числа. "Предупреждения" и "замечания" при компиляции в gcc под linux»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> void GetsArrayRand(int A[], int N) { int i; srand(time(NULL)); //for (i = 1; i <= N; i++) // Адресация в массиве начинается с 0 for (i = 0; i < N; i++) { A[i] = rand() % 100; } } void GetsArrayHand(int A[], int N) { int i; char buffer[10]; //for (i = 1; i <= N; i++) // Адресация в массиве начинается с 0 for (i = 0; i < N; i++) { printf("Введите A[%d]=", i); fgets(buffer, 5, stdin); A[i] = atoi(buffer); } } void PutsArray(int A[], int N) { int i; //for (i = 1; i <= N; i++) // Адресация в массиве начинается с 0 for (i = 0; i < N; i++) { printf("%d ", A[i]); } printf("\n"); } //main(int argc, char* argv[]) // Функция main должна возвращать int int main(int argc, char* argv[]) { //int N, A[N]; // N не инициализирована, соответственно размерность // массива не известна int N = 0, A[40]; //logo(); // Не понятно что за функция //if (argc < 3) // Аргументов должно быть 3. Первым (т.е. 0-ым) идёт имя программы if (argc != 3) { puts("Программа находит простые числа в одномерном целочисленном массиве и выводит их номера."); puts("Для запуска используйте аргументы командной строки:"); puts("./03 N r -- автоматическое задание массива размером N;"); puts("./03 N h -- ручное задание массива размером N;"); puts(", где N - целое число."); puts("Пример:"); puts("./03 10 r - автоматическое задание массива размером 10."); return 1; } //if (argc = 2) // Даже если это и оставлять и не пользоваться return-ом 3-мя строчками выше // всё равно не верно, ибо аргументов будет 3 N = atoi(argv[1]); if (N < 2 || N > 40) { puts("Ошибка.\nКол-во элементов должно быть больше 1 и меньше 40"); exit(1); } if (strcmp(argv[2], "r") == 0) { printf("Был выбрал АВТОМАТИЧЕСКИЙ способ заполнения массива размером %d\n", N); //GetsArrayRand(A[N], N); // Передаём весь массив, а не значение одного его элемента GetsArrayRand(A, N); } if (strcmp(argv[2], "h") == 0) { printf("Был выбрал РУЧНОЙ способ заполнения массива размером %d\n", N); //GetsArrayHand(A[N], N); // Передаём весь массив, а не значение одного его элемента GetsArrayHand(A, N); } puts("Исходный массив:\n"); //PutsArray(A[N], N); // Передаём весь массив, а не значение одного его элемента PutsArray(A, N); return 0; }
Объяснение кода листинга программы
- Объявлены функции:
- GetsArrayRand()
- GetsArrayHand()
- PutsArray()
- main()
- В функции main() инициализированы переменные:
- N = 0
- A[40]
- Проверка аргументов командной строки:
- Если аргументов меньше или равно 2, выводится сообщение об ошибке и программа завершается.
- Если аргументов больше 2, то:
- Переменная N инициализируется значением первого аргумента командной строки.
- Переменная N проверяется на соответствие условиям (больше 1 и меньше 40).
- Если условия не выполняются, выводится сообщение об ошибке и программа завершается.
- Если условия выполняются, то:
- Если второй аргумент равен
r
, то вызывается функция GetsArrayRand(). - Если второй аргумент равен
h
, то вызывается функция GetsArrayHand().
- Вывод исходного массива:
- Вызывается функция PutsArray().
- Возвращение значения 0, что означает успешное завершение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д