mein Code wurde wiederholt Korrektur gelesen und ich bin immer noch nicht in der Lage herauszufinden, warum einige dieser Zeilen Fehlermeldungen ausgeben. Zeilen mit nur einem '}' werden als Fehler ausgegeben. Wie ist das möglich?Extraneous Fehler? Wo und was sind sie? C Programmierung
#include <stdio.h>
#include <getword.h>
#define STORAGE 255
int getword(char *w) {
char *word = w; /*points to first char in array */
char iochar; /*holds current var being processed */
int counter = 0; /* counts number of characters in a word */
char *first = w; /* points to first character in array */
int bslashflag = 0; /* 0 if no backslash seen, 1 otherwise */
int negateornah = 0; /* if set to 1, return value is negated */
while((iochar = getchar()) != EOF) { /*runs until EOF is encountered */
if(iochar =='\\') /* if a slash char is found in the word*/
{ bslashflag = 1; /*acknowledge that*/
/*backslash was seen*/
iochar = getchar(); /* skip it & go to the next char*/
if(iochar == '\'){ /*and if it ends up being another*/
/*slash, slash designated to be added in */
*word = iochar; /* so go ahead and add it in */
*word++; /* and go to the next empty slot */
counter++; /*and increment your counter */
iochar = getchar(); /* *ALERT << may or may not beneccessary */
} else if(iochar == '<' || iochar == '>' || iochar == '|' || iochar == '$' || iochar == '&')
{ /* if a metacharacter is found after a bslash, */
/*just treat it like any other character*/
*word = iochar;
*word++;
counter+=1;
}
}
else if (iochar == ' ')
{
if(counter == 0) //*f the first char is a space */
{
while((iochar = getchar()) == ' ') { } /*skips leading blanks*/
} else if(bslashflag == 1) { /*if there was bslash before space*/
*word++ = iochar; /*add the space as part of string*/
counter++; /*increments counter*/
bslashflag--; /*resets backslash flag for next char check*/
}
else
{ /* until alphanum char is found*/
*word = '\0'; /*if not leading blank, its the end of word*/
if(negateornah == 1)
{
negateornah= 0; /*reset flag for next run*/
counter *= -1; /*negate the value in counter*/
return counter;
}
return counter; /* return word size */
}
}
else if(iochar == '\n' || iochar == '<' || iochar == '>' || iochar == '|' || iochar == '$' || iochar == '&')
{ /*if a metacharacter is encountered*/
if(iochar == '\n' && counter == 0) /* if the first char in the word is \n */
{
*word = '\0'; /* and null terminate the array; TRY *first INCASE OF ERROR*/
if(negateornah == 1) {
negateornah= 0; /*reset flag for next run*/
counter *= -1; /*negate the value in counter*/
return counter;
}
return counter; /* null terminate the array and return count so scan can continue*/
}
else if(iochar == '\n' && counter != 0)
{
*word = '\0' ;
ungetc('\n',stdin); /* put it back where you got it*/
if(negateornah == 1) {
negateornah= 0; /*reset flag for next run*/
counter *= -1; /*negate the value in counter*/
return counter;
}
return counter; /*and return a number so the scan can continue*/
}
else if(iochar == '$')
{
if(counter ==0) {
negateornah = 1; } /*means $ was first char in word, set negate count flag*/
if(bslashflag == 1) /* if a backslash was seen before this character*/
{
*word = iochar; /* just add it into the word*/
*word++; /* as part of the string*/
counter++; /* and count it as a letter*/
bslashflag=0; /*reset flag for next check*/
}
*word++ = iochar; /*add it into word*/
counter++; /*and account for addition*/
return counter;
}
else if(iochar == '|') {
if(counter==0){
*word = iochar;
*word++;
counter++
return counter;
}
if(bslashflag == 1) {
*word = iochar;
*word++;
counter++;
int bslashflag = 0;
}
if(negateornah == 1) {
negateornah= 0; //reset flag for next run*/
counter *= -1; //negate the value in counter*/
return counter;
}
return counter;
}
else if(iochar == '&') {
if (counter ==0) {
*word++ = iochar;
*word = '\0';
counter++;
return counter;
}
if(bslashflag == 1) {
*word = iochar;
*word++;
counter++;
bslashflag = 0;
}
if(negateornah == 1) {
negateornah= 0; /*reset flag for next run*/
counter *= -1; /*negate the value in counter*/
return counter;
}
return counter;
}
else if(iochar == '<' || iochar == '>') {
if(counter==0){
*word++ = iochar;
*word = '\0';
return counter;
}
if(bslashflag==1) {
*word = iochar;
*word++;
counter++;
bslashflag = 0;
}
if(negateornah == 1) {
negateornah= 0; /*reset flag for next run*/
counter *= -1; /*negate the value in counter*/
return counter;
}
return counter;
}
else if (iochar == ' ') /* if space is encountered*/
{
if(bslashflag == 1){ /* if a backslash was seen before this*/
*word = iochar;
*word++;
counter++;
bslashflag = 0;
}
else if(counter == 0) /* as the first character */
{
while((iochar = getchar()) == ' ') { } /*keep going until*/
}
else { /* iochar is not a space*/
*word = '\0'; /* this block handles the word ending space*/
if(negateornah == 1) {
negateornah= 0; /*reset flag for next run*/
counter *= -1; /*negate the value in counter*/
return counter;
}
return counter; /* by null terminating the word at the end*/
} /* and returning the count and printed word*/
}
*word++ = iochar; /* add iochar into the array if its an alphanum char*/
counter+=1; /* increment counter to reflect added char*/
}
*word = '\0'; /* if EOF is encountered*/
*first = '\0'; /* null terminate entire word, clearing it from the array*/
if(counter != 0){
if(negateornah == 1) {
negateornah= 0; /*reset flag for next run*/
counter *= -1; /*negate the value in counter*/
return counter;
}
return counter; /*ensure word continues in next run*/
}
return -1; /*and return -1 for EOF*/
}
iochar == ‚\‘ sollte iochar == seine ‚\\‘. Aber es gibt andere Probleme. –
'counter ++' -> 'counter ++;' – BLUEPIXY
Behandeln Sie die Fehler nacheinander. Oder behandeln Sie den ersten gemeldeten Fehler. Schau, ob der nächste Sinn ergibt. Wenn nicht, ist es vielleicht eine Folge des ersten Fehlers und einfach versuchen, neu zu kompilieren. Wenn der nächste Fehler Sinn macht, behebe ihn auch und gehe zum nächsten, usw. Wiederhole, bis alle Fehler behoben sind. (Gehen Sie dann zurück und fügen Sie den Compileroptionen weitere Warnungen hinzu und wiederholen Sie die gesamte Übung.) Bitte zeigen Sie keine Bilder der Fehlermeldungen an. Fügen Sie sie als "Code" in Ihre Frage ein. Und kompiliert der 'getword.h'-Header eigenständig? Müssen wir wissen, was drin ist? –