I have a problem which after many tests I think it's due to me not understanding how the input buffer works.
I have a while cycle which should continue to iterate until the user types "no" to stop the iteration.
I have two problems.
CODE:
int foo = 0;
do{
  int i, cycles;
  char array[MAX_LENGTH+1];
  for(cycles=0; cycles < MAX_READ_CYCLES; cycles++){
    i=0;
    printf("\n\nEnter a string: ");
    char ch;
    while ((ch = getchar()) != '\n' && ch != EOF) {
      array[i] = ch;
      i++;
    }
    array[i] = '\0'; //string terminator
    printf("String you entered: %s\n", array);
    printf("\nDo you want to continue? 1: yes / 0: no \n");
    scanf("%d", &foo);
  }
} while( foo == 1);
OUTPUT
Enter a string: test
String you entered: test
Do you want to continue? 1: yes / 0: no
0
Enter a string: String you entered: 
Do you want to continue? 1: yes / 0: no
3
Enter a string: String you entered: 
Do you want to continue?
                Your program doesn't terminate if the user enters "yes" because of the inner for loop:
#include <stdio.h>
#include <string.h>
#define MAX_LENGTH 100
#define MAX_READ_CYCLES 100
int main() {
    int cycles = 0;
    char foo[4];
    do {
        char array[MAX_LENGTH + 1];
        printf("\n\nEnter a string: ");
        char ch;
        int i = 0;
        while ((ch = getchar()) != '\n' && ch != EOF) {
            array[i] = ch;
            i++;
        }
        array[i] = '\0'; //string terminator
        printf("String you entered: %s\n", array);
        printf("\nDo you want to continue?");
        scanf("%s", foo);
        cycles++;
        while ((ch = getchar()) != '\n' && ch != EOF); // force drop stdin
    } while (strcmp(foo, "yes") == 0 && cycles < MAX_READ_CYCLES);
}
Also see I am not able to flush stdin and http://c-faq.com/stdio/stdinflush2.html
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With