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