Интересно, почему два значения int не подтверждают условие if, даже если оно истинно. printf показывает, что оба они равны.
Может ли переполнение буфера влиять на поведение условий if, нарушая поведение других разделов кода.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
srand(time(NULL));
char instring[2]; // when this increases somehow I get the right behavior
int inint;
int guess;
guess = rand() % 127;
inint = ~guess;
printf("%i\n", guess); //testing with printf()
while (guess != inint) {
printf("Guess Number\r\n");
gets(instring);
inint = atoi(instring);
printf("%i\n", inint);
if (inint > guess) {
printf("%i\n", inint);
puts("too high");
} else if (guess > inint) {
puts("too low");
} else {
puts("right");
}
}
return 0;
}
gets
! Это опасная функция, которая склонна к переполнению буфера (которое у вас есть), и поэтому она была удалена из спецификации C. Используйте, например. вместо этогоfgets
илиgetline
, если вы работаете в системе POSIX. - person Some programmer dude   schedule 16.04.2018char
строки в C на самом деле называются заканчивающимися нулем байтовыми строками. Этот нуль-терминатор важен, и ему нужен собственный элемент в массиве. Это означает, что строка из двух символов требует места для трех, чтобы включить терминатор. - person Some programmer dude   schedule 16.04.2018atoi
, так иgets
а> не следует использовать - person phuclv   schedule 16.04.2018