syntax error. Warum?

D

djtraumwelt

Foren As
Code:
#include <stdio.h>
#include <string.h>

 typedef struct {
  char riff1;
  char riff2;
  char riff3;
  char riff4;
  int dateigros;
  char wave1;
  char wave2;
  char wave3;
  char wave4;
  char fmt1;
  char fmt2;
  char fmt3;
  char fmt4;
  int fmtlen;
  short int fmttag;
  short int channels;
  int rate;
  int bytessec;
  short int blockalign;
  short int bits;
  char data1;
  char data2;
  char data3;
  char data4;
  int len;
 } waveheader;

int main(int argc, char *argv[]) {
 short int *wavedata;
 short int *wavesinus;
 short int *waveton1;
 short int *waveton2;
 FILE *fp;

 makesine(wavesinus);
 fp=fopen("sine.wav","wb");
 fwrite(waveheader,1,44,fp); //hier syntax error before "waveheader"
 fwrite(wavesinus,2,2000,fp);
 fclose(fp);

 return 0;
}

int makesine(short int *wavesinus) {
 wavesinus=(short int *) malloc(4000);
 short int u=-125;
 short int uplus=1;
 short int y[3] = {0};
 int x=0;
 while(x < 4000) {
  y[2]+=u;
  y[1]=(y[0]+y[2]) / 2;
  wavesinus[x]=y[0];
  wavesinus[x+1]=y[0];
  wavesinus[x+2]=y[1];
  wavesinus[x+3]=y[1];
  y[0]=y[2];
  x+=4;
  u+=uplus;
  if (u==-125)
   uplus=1;
  if (u==125)
   uplus=-1;
 }
 waveheader.riff1='R'; //hier syntax error before '.'
 waveheader.riff2='I';
 waveheader.riff3='F';
 waveheader.riff4='F';
 waveheader.wave1='W';
 waveheader.wave2='A';
 waveheader.wave3='V';
 waveheader.wave4='E';
 waveheader.fmt1='f';
 waveheader.fmt2='m';
 waveheader.fmt3='t';
 waveheader.fmt4=' ';
 waveheader.fmtlen=16;
 waveheader.fmttag=1;
 waveheader.channels=2;
 waveheader.rate=44100;
 waveheader.bytessec=176400;
 waveheader.blockalign=4;
 waveheader.bits=16;
 waveheader.data1='d';
 waveheader.data2='a';
 waveheader.data3='t';
 waveheader.data4='a';
 waveheader.len=4000;
 waveheader.dateigros=waveheader.len+36;
 return 0;
}

int maketon(int power1, int power2, int power3, int power4, int power5) {
 short int laut[1000];
 int i;
 for(i=0; i < 1000; i++)
  laut[i]=7000/i;
 return 0;

}

zwei mal syntax error, die ich beide nicht verstehe.
 
Syntax error isn Bisschen unspezifisch, oder?
Hier mal die Ausgabe von "gcc -W -Wall test.c" (solltest du am Besten auch benutzen, damit gibts (mehr und) genauere Fehlermeldungen):
Code:
test.c: In function ‘main’:
test.c:39: warning: implicit declaration of function ‘makesine’
test.c:41: error: expected expression before ‘waveheader’
test.c:41: error: too few arguments to function ‘fwrite’
test.c:36: warning: unused variable ‘waveton2’
test.c:35: warning: unused variable ‘waveton1’
test.c:33: warning: unused variable ‘wavedata’
test.c: At top level:
test.c:32: warning: unused parameter ‘argc’
test.c:32: warning: unused parameter ‘argv’
test.c: In function ‘makesine’:
test.c:49: warning: implicit declaration of function ‘malloc’
test.c:49: warning: incompatible implicit declaration of built-in function ‘malloc’
test.c:69: error: expected identifier or ‘(’ before ‘.’ token
test.c:70: error: expected identifier or ‘(’ before ‘.’ token
test.c:71: error: expected identifier or ‘(’ before ‘.’ token
test.c:72: error: expected identifier or ‘(’ before ‘.’ token
test.c:73: error: expected identifier or ‘(’ before ‘.’ token
test.c:74: error: expected identifier or ‘(’ before ‘.’ token
test.c:75: error: expected identifier or ‘(’ before ‘.’ token
test.c:76: error: expected identifier or ‘(’ before ‘.’ token
test.c:77: error: expected identifier or ‘(’ before ‘.’ token
test.c:78: error: expected identifier or ‘(’ before ‘.’ token
test.c:79: error: expected identifier or ‘(’ before ‘.’ token
test.c:80: error: expected identifier or ‘(’ before ‘.’ token
test.c:81: error: expected identifier or ‘(’ before ‘.’ token
test.c:82: error: expected identifier or ‘(’ before ‘.’ token
test.c:83: error: expected identifier or ‘(’ before ‘.’ token
test.c:84: error: expected identifier or ‘(’ before ‘.’ token
test.c:85: error: expected identifier or ‘(’ before ‘.’ token
test.c:86: error: expected identifier or ‘(’ before ‘.’ token
test.c:87: error: expected identifier or ‘(’ before ‘.’ token
test.c:88: error: expected identifier or ‘(’ before ‘.’ token
test.c:89: error: expected identifier or ‘(’ before ‘.’ token
test.c:90: error: expected identifier or ‘(’ before ‘.’ token
test.c:91: error: expected identifier or ‘(’ before ‘.’ token
test.c:92: error: expected identifier or ‘(’ before ‘.’ token
test.c:93: error: expected identifier or ‘(’ before ‘.’ token
test.c: At top level:
test.c:97: warning: unused parameter ‘power1’
test.c:97: warning: unused parameter ‘power2’
test.c:97: warning: unused parameter ‘power3’
test.c:97: warning: unused parameter ‘power4’
test.c:97: warning: unused parameter ‘power5’
 
Du kannst ja auch afaik nicht dem Prototyp der struct Werte zuweisen. Instanzier mal ne Variable des Typs waveheader und mach da dann die Zuweisungen.
Kenn mich aber selber auch nicht so sehr in c aus.
 
Du kannst ja auch afaik nicht dem Prototyp der struct Werte zuweisen. Instanzier mal ne Variable des Typs waveheader
Das ist das eine Problem, das andere ist ein zu kleines malloc. Und soll das in "maketon" wirklich Integerarithmetik sein?

PHP:
#include <stdio.h>
#include <string.h>
#include <malloc.h>

typedef struct _waveheader {

	char riff [4];
	int dateigros;
	char wave [4];
	char fmt [4];
	int fmtlen;
	short int fmttag;
	short int channels;
	int rate;
	int bytessec;
	short int blockalign;
	short int bits;
	char data [4];
	int len;
 } waveheader;

int makesine(short int *wavesinus) {
	// aufpassen hier
	wavesinus=(short int *) malloc(4000 * sizeof(short));
	short int u=-125;
	short int uplus=1;
	short int y[3] = {0};
	int x=0;	

	while(x < 4000) {
		y[2]+=u;
		y[1]=(y[0]+y[2]) / 2;
		wavesinus[x]=y[0];
		wavesinus[x+1]=y[0];
		wavesinus[x+2]=y[1];
		wavesinus[x+3]=y[1];
		y[0]=y[2];
		x+=4;
		u+=uplus;

		if (u==-125)
			uplus=1;

		if (u==125)
			uplus=-1;
	}

	return 0;
}

int main(int argc, char *argv[]) {
	short int *wavedata;
	short int *wavesinus;
	short int *waveton1;
	short int *waveton2;

	waveheader whdr;

	whdr.riff [0] = 'R';
	whdr.riff [1] = 'I';
	whdr.riff [2] = 'F';
	whdr.riff [3] = 'F';

	whdr.wave [0] = 'W';
	whdr.wave [1] = 'A';
	whdr.wave [2] = 'V';
	whdr.wave [3] = 'E';

	whdr.fmt [0] = 'f';
	whdr.fmt [1] = 'm';
	whdr.fmt [2] = 't';
	whdr.fmt [3] = ' ';

	whdr.fmtlen=16;
	whdr.fmttag=1;
	whdr.channels=2;
	whdr.rate=44100;
	whdr.bytessec=176400;
	whdr.blockalign=4;
	whdr.bits=16;

	whdr.data [0] = 'd';
	whdr.data [1] = 'a';
	whdr.data [2] = 't';
	whdr.data [3] = 'a';

	whdr.len=4000;
	whdr.dateigros=whdr.len+36;

	FILE *fp;

	makesine(wavesinus);
	fp=fopen("sine.wav","wb");

	fwrite(&whdr,1,44,fp);
	fwrite(wavesinus,2,2000,fp);
	fclose(fp);

	return 0;
}

int maketon (int power1, int power2, int power3, int power4, int power5) {
	short int laut[1000];
	int i;

	for(i=0; i < 1000; i++)
		laut[i]=7000/i;

	return 0;
}
 
Zuletzt bearbeitet:
OK, vielen dank, jetzt versteh ichs. Und funktionieren tuts auch =)
 

Ähnliche Themen

ip6tables Problem

Prozesskommunikation mit PIPES - wie funktioniert das?

Ausführbare C-Datei von Mac OS auf Embedded Linux ausführen

Debian Routing Problem

Queue für copy Script

Zurück
Oben