C проблема бесконечного цикла при запросе
Почему в этом коде выполняется бесконечный цикл без повторного запроса пользователя?
#include <stdio.h>
#include <string.h>
#include <ctype.h>
void to_rot13(char* value);
int main(){
char word[1024];
printf("C ROT13\nSome data to code or decode\n");
while (1){
printf(": ");
scanf("%[^\n]s", word);
to_rot13(&word);
printf(": %s\n", word);
}
return 0;
}
void to_rot13(char* value){
unsigned int x;
for (x = 0; value[x] != '\0'; x++){
if ((value[x] < 'A') || (value[x] > 'Z' && value[x] < 'a') || (value[x] > 'z')){}
else if (tolower(value[x]) <= 'm'){value[x] = value[x] + 13;}
else{value[x] = value[x] - 13;}
}
}
Я хотел бы снова попросить пользователя, я не могу быть более точным.
2 ответа
scanf("%[^\n]s", word);
оставляет новую строку во входном буфере, поэтому следующий scanf
немедленно возвращается без чтения каких-либо дополнительных данных, так как первый char
в буфере остается новая строка. Вам нужно удалить новую строку из буфера ввода.
int c;
do {
c = getchar();
}while(c != '\n' && c != EOF);
if (c == EOF) {
exit(EXIT_FAILURE); // input borked
}
Кроме того, обратите внимание на предупреждение компилятора и пройти word
вместо &word
в to_rot13
,
Вы отправляете сообщение to_rot13
(вы должны отправить слово или & слово [0])