简体   繁体   中英

How to run through a loop multiple times in C?

Ok i modified my code but cannot get it to break when the user inputs 0. I tried 0, '0', and "0" and neither break the loop.

#include <stdio.h>
#include<conio.h>

int main(){
int word;
int countword = 0;
int countpunct = 0;
do{
    printf("\nEnter the String: ");
    while ((word = getchar()) != EOF && word != '\n'){
        if (word == ' ' || word == '.' || word == '?' || word == '!' || word == '(' || word == ')' || word == '*' || word == '&'){
            countword++;
        }
        if (word == '.' || word == '?' || word == '!' || word == '(' || word == ')' || word == '*' || word == '&'){
            countpunct++;
        }
    }
    printf("\nThe number of words is %d.", countword);

    printf("\nThe number of punctuation marks is %d.", countpunct);

} while (word!= 0);

}

Your inner loops break when word is either EOF or \\n . Since you never modify it when you get to the end of the outer loop, the condition will always be true.

Going back to your pre-edit code, all you really need is to change scanf("%c", word); to scanf("%c", &word); , although you should use a separate char variable for that, since the %c format specifier expected a pointer to char . So your code should look like this:

#include <stdio.h>
#include <stdlib.h>

int main(){
    int word;
    char cont;
    for (;;){
        int countword = 0;
        int countpunct = 0;
        printf("\nEnter the String: ");
        while ((word = getchar()) != EOF && word != '\n'){
            if (word == ' ' || word == '.' || word == '?' || word == '!' || word == '(' || word == ')' || word == '*' || word == '&'){
                countword++;
            }
            if (word == '.' || word == '?' || word == '!' || word == '(' || word == ')' || word == '*' || word == '&'){
                countpunct++;
            }
        }
        printf("\nThe number of words is %d.", countword);

        printf("\nThe number of punctuation marks is %d.", countpunct);

        printf("\nContinue? Y/N?");
        scanf("%c", &cont);
        if (cont!= 'y' && cont!= 'Y'){
            return 0;
        }
    }
}

Note also that countword and countpunct are moved inside of the outer loop. That way, they're initialized to 0 for each new set of words.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM