Kommandozeile auswerten
Aufgabenstellung:
Ändern sie bitte das C-Programm vom Übungsblatt 7 , sodass der Name der Meßwertedatei beim Aufruf des ausführbaren Programms übergeben wird:
./progname filename
Ihr Programm soll auch folgendes überprüfen:
- ob der Benutzer das ausführbare Programm mit dem richtigen Argument <filename> aufgerufen hat. Falls nicht bitte Programmausführung mit einer Usage-Meldung abbrechen.
- ob die eingegebene Datei existiert. Falls nicht bitte Programmausführung mit einer Fehlermeldung abbrechen.
Lösung
CCode:
#include <stdio.h>double average(double data[], int count){
int i;
double summe=0;
for (i=0;i<count;i++)
summe+=data[i];
return summe/(count);
}
int main(int argc, char **argv)
{
double *data;
int count=0;
int datasize=10;
double actdata;
FILE *fdata;
if(argc < 2) {
fprintf(stderr, "Aufruf via progname filename");
return 0;
}
if ((fdata = fopen(argv[1], "r")) == NULL)
{
fprintf(stderr, "Datenfile kann nicht gefunden werden. \n");
return -1;
}
count=0;
data=(double*)malloc(sizeof(double)*datasize);
while(fscanf(fdata,"%lf",&actdata)!=EOF){
count++;
if (count > datasize) {
datasize+=10;
data=(double*)realloc(data,sizeof(double)*datasize);
}
data[count-1]=actdata;
}
printf("%f",average(data,count));
return 0;
}
Eingabe von:
c8.exe data.txtliefert:
Ausgabe stdout:
9.962963