1

このプログラムの最後の部分で苦労しています。配列を 2 つの異なる関数に渡す必要がありますが、その方法がわかりません。

私が発生する唯一のエラー:ここ:

 input(array[20]);
 calculate(array[20],&pairs);

そしてここ:

//exit,
exit;

それ以外は、必要な方法で動作するはずですが、通常の変数でポインターを使用する方法を理解しましたが、配列の動作が異なり、何をすべきかわかりません...

ドキュメントは半分完成しており、説明で概説されているループを最後に追加する必要がありますが、配列を渡すのに助けが必要です。

また、私の終了行に関連するエラーは質問とは無関係ですが、修正を知っていれば素晴らしいでしょう!

/*
Description: Do not use global variables. Pass your arguments by value and
             by reference. Using arrays and modular programming techniques,
             write a C program that will allow a user to populate an array
             with integers, and then compute and print out the number of
             adjacent pairs in the array (i.e. the number of occurrences where
             an array element is the same as its neighbors). For example, if
             the array contained [2,3,3,4,52,52,4,4,4,4,7,7,1], the number of
             adjacent pairs is 6. The program should give the user the option
             of examining more than one array (i.e. loop). Assume the array has
             a max. of 20 elements. The main() function should primarily be
             responsible to direct the flow of logic.  That is: use one
             function to obtain input (pass by reference), another function to
             do processing (pass by value), and perhaps a third function to do
             output (pass by value).  The main() function should call the input
             function and the processing function. 
*/

//Include statements.
#include <cstdlib>
#include <iostream>
#include <math.h>

//Standard namespace.
using namespace std;

void input (int array[20]); //Used when user inputs the numbers.
void calculate(int array[20], int *pairs); //Used to calculate the matches.
void output(int *pairs); //Used to output the number of pairs.

int main(void) 
{ 
     int array[20] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
     char quit;

     start:
     int pairs = 0;
     input(array[20]);
     calculate(array[20],&pairs);
     output(&pairs);

     //Ask the user if they want to exit
     printf("\nWould you like to continue testing my project, or exit?");
     printf("\nTo exit input: 'N' or 'n'. To continue testing input anything else.");
     //store their input in variable: exit
     scanf("%s",&quit);
     //If they want to exit...
     if (quit == 'N' || quit == 'n')
     {
         //exit,
         exit;
     }
     //otherwise,
     else
     {
         //clear the screen
         system("cls");
         //and go back to the start.
         goto start;
     }
}

void input(int array[20])
{
     int count = 0;
     for (count;count<20;count++)
     {
         printf("Enter values . . . \n");
         scanf("%i", &array[count]);
     }
}

void calculate(int array[20], int *pairs)
{
     int counter = 0;
     for (counter;counter<19;counter++)
     {
         if (array[counter] == array[counter+1])
            *pairs+=1;
     }
}

void output(int *pairs) 
{
     printf("Number of pairs: [%i]\n", *pairs);
}
4

1 に答える 1

0

関数を呼び出すときにサイズを渡さないでください。

input(array);

それで十分なはずです。


別の解決策は、関数にint*. 配列のサイズを渡すために、追加のパラメーターを追加します。

void func(int* my_array, int size);

次のように配列を宣言します。

int i[20];

そして、次のように関数を呼び出します。

func(i, 20);

現在、 を渡すとarray[20]が返さintれ、最大インデックスが であるため、知りたい場合に備えて範囲外になります19。式の戻り値の型が不適切なため、プログラムをコンパイルできません。

于 2013-03-23T23:43:27.170 に答える