一种函数,用于将数据输入到退出EOF条目但允许继续输入的数组中

时间:2014-10-31 19:22:33

标签: c arrays

所以我有一个编写菜单驱动的迷你统计软件包的任务。 用户应该能够输入最多200项浮点数据。

该程序应计算或显示:

  1. 以有组织的表格式自行获取的数据
  2. 项目数
  3. 平均值
  4. 标准差
  5. 方差
  6. 中位数
  7. 数据模式
  8. 数据中的高值
  9. 数据中的低值
  10. 输入数据时,如果输入CTRL-Z或CTRL-D或文件结尾 系统上的符号退出数据输入循环并返回主菜单。

    菜单选项很简单

    1. 输入数据
    2. 显示已处理的数据
    3. 退出程序
    4. 但是当您再次返回数据时,它会询问您程序是否还应询问您是否希望向数据集添加更多数据或创建新数据集。

      所以我不知道怎么做这种功能,如果我已输入数据,它会存储一个计数。此外,我不太确定如何通过将数据输入数组来完成文件结束。

      我有一些伪代码,但没有别的。

      非常感谢一些建议。

      我已经拥有了所有其他功能来处理数组中的数据并显示它但只是不确定如何进行输入。

      现在这里是我的程序的基本部分,以显示菜单应如何在输入和显示之间来回流动我的输入功能是我知道的废话。

      #include <stdio.h>
      #include <stdlib.h>
      #include <math.h>
      #include <string.h>
      #include <ctype.h>
      #include <time.h>
      #define MAX 200
      
      //menu functions
      void menu();
      int displaymenu();
      
      //data entry function
      void enterdata(double a[],int n);
      
      
      void displaydata(double a[],int n);
      //display data functions
      void func_printdata(double a[],int n);
      int func_item_number(double a[],int n);
      double func_largest(double a[],int n);
      double func_smallest(double a[],int n);
      double func_mean(double a[],int n);
      double func_median(double a[],int n);
      double func_mode(double a[],int n);
      double func_variance(double a[],int n);
      double func_standard_deviation(double a[],int n);
      
      int main(){
          double x[MAX];
      
          menu();
      
          //needed for all basic programs to run for the professor
          system("pause");
      
          return(0);
      }
      
      void menu(){
      
          int com;
      
          do{
              com = displaymenu();
              switch(com){
                  case 1:
                      enterdata(x,MAX);
                      break;
                  case 2:
                      displaydata(x,MAX);
                      break;
                  case 3:
                      printf("Have a nice day\n");
                      break;
              }
          }while(com != 3);   
      }
      
      int displaymenu(){
      
          int choice;
      
          printf("*------------------------------------------------------------*\n");
          printf("|    Mini Stats Package                                      |\n");
          printf("*------------------------------------------------------------*\n");
          printf("*                                                            *\n");
          printf("*    This Program will perform the following:                *\n");
          printf("*                                                            *\n");
          printf("*    1. Enter Data.                                          *\n");
          printf("*                                                            *\n");
          printf("*    2. Display the data and the following statistics:       *\n");
          printf("*       the number of data items, the high and low values    *\n");
          printf("*       in the data, the mean, the median, mode, variance    *\n");
          printf("*       and the standard deviation.                          *\n");
          printf("*                                                            *\n");
          printf("*    3. Quit Program                                         *\n");
          printf("*                                                            *\n");
          printf("*------------------------------------------------------------*\n");
          printf("Your Choice? ");
          scanf("%d",&choice);
          printf("\n\n\n");
          return choice;      
      }
      
      void enterdata(double a[], int n){
      
          double a[];
          int i;
          int j;
          int k;
          char ynchoice;
      
          printf("Enter in your data");
      
          if(k =< 0){
              for(i=0 ; i < n; i++){
                  j=1+i
                  k++;
                  printf("Item %d: ",j);
                  while((scanf("%d",&a[i]))!= EOF){
                      scanf("%f",&a[i]);
      
          else{ 
              printf("Do you wish to add new data to existing sample? (Y/N) ");
              scanf("%c",&yesnochoice);
              if (ynchoice == 'y'||'Y'){
      
              }
              else{
      
              }
      
          menu(); 
      
      }
      
      return(0);
      
      void displaydata(double a[], int n){
      
          double a[];
          int data_item_number;
          double data_largest;
          double data_smallest;
          double data_mean;
          double data_median;
          double data_mode;
          double data_variance;
          double data_standard_deviation;
      
          data_item_number = func_item_number(a,MAX);
          data_largest = func_largest(a,MAX);
          data_smallest = func_smallest(a,MAX);
          data_mean = func_mean(a,MAX);
          data_median = func_median(a,MAX);
          data_mode = func_mode(a,MAX);
          data_variance = func_variance(a,MAX);
          data_standard_deviation = func_standard_deviation(a,MAX);
      
      
          printf("-----------------------------------------------------------*\n");
          printf("    Mini Stats Package                                     |\n");
          printf("-----------------------------------------------------------*\n");
          printf("Data Items:\n");
          printf(func_printdata(a,MAX));
          printf("Number of data items : %d\n",data_item_number);
          printf("Largest data item    : %f\n",data_largest);
          printf("Smallest data item   : %f\n",data_smallest);
          printf("Mean                 : %f\n",data_mean);
          printf("Median               : %f\n",data_median);
          printf("Mode                 : %f\n",data_mode);
          printf("Variance             : %f\n",data_variance);
          printf("Standard Deviation   : %f\n",data_standard_deviation);
          printf("-----------------------------------------------------------*\n");
      
          menu();
      
      
      }
      
        // Rest of the functions for processing data 
      

1 个答案:

答案 0 :(得分:0)

您需要设计不同的计划/逻辑来发出数据结束信号。如果您使用EOF作为决定数据结尾的方法,则无法输入主菜单的选项。

例如,您可以询问用户数据点的数量。然后,期望用户输入数据点。

int numData;
scanf("%d", &numData);
for ( i = 0; i < numData; ++i )
{
    scanf("%lf", &a[i]);
}

这就是策略。您需要为每个scanf添加错误处理代码。你必须准备好处理不良的输入 - 无论是故意的还是偶然的。