Так что я тестировал несколько вещей, и я заметил, что со следующим кодом, если пользовательский ввод Y/y, он не выйдет из цикла (я вызываю getchar() еще раз, чтобы избавиться от \ п в очереди, так что будет готов к следующему входу от пользователя):C getchar() странное поведение
#include <stdio.h>
#include <stdbool.h>
int main(int argc, char* argv[]) {
for(int i = 0; i < argc; i++)
printf("argv[%d] = %s\n", i, argv[i]);
char name[20];
printf("What's your name ? ");
gets(name);
char lastname[20];
printf("%s what's your last name ? ", name);
fgets(lastname, 20, stdin);
int age;
printf("%s %s what's your age? ", name, lastname);
scanf("%d", &age);
bool exit = false;
char c;
while (!exit) {
printf("Do you wish to exit the program ? (Y/N) ");
c = getchar();
getchar();
if (c == 'Y' || c == 'y')
exit = true;
}
printf("Have a nice day %s %s.\n", name, lastname);
return 0;
}
Может кто-нибудь просветить меня, что это проблема?
Скомпилируйте все предупреждения и информацию об отладке (например, 'gcc -Wall -g'). Затем используйте отладчик (например, 'gdb') –
Вы забыли нажать enter после Y? – Sayutee
Вы должны изучить * каждый * символ, который вы читаете, и обрабатывать каждый, а не предполагать, что вы получите новые строки при определенных вызовах. – hyde