Поэтому я написал простую программу, которая преобразует десятичное число в двоичное и принимает только положительные целые числа. Таким образом, будут выводиться такие числа, как -2 и 1,1. Извините, это не положительное целое число. Он бесконечно просит пользователя ввести число, пока пользователь не нажмет ctrl + D
. Однако, когда я тестировал его, он распечатывал заявление «Извините...» перед завершением программы.
Вот мой код:
#include <stdio.h>
#include <stdlib.h>
void DecToBin(int userInput){
int binary[32];
int i = 0;
while (userInput > 0) {
binary[i] = userInput % 2;
userInput /= 2;
i++;
}
for (int j = i - 1; j >= 0; --j) {
printf("%d", binary[j]);
}
}
int main(void) {
double userDec;
int temp;
printf("Starting the Decimal to Binary Converter!\n\n");
while(!feof(stdin)) {
printf("Please enter a positive whole number (or EOF to quit): ");
scanf("%lf", &userDec);
temp = (int)(userDec);
if ((userDec > 0) && (temp / userDec == 1)) {
printf("\n\t%.0lf (base-10) is equivalent to ", userDec);
DecToBin(userDec);
printf(" (base-2)!\n\n");
}
else {
printf("\tSorry, that was not a positive whole number.\n");
}
}
printf("\n\tThank you for using the Decimal to Binary Generator.\n");
printf("Goodbye!\n\n");
return 0;
}
(Все вкладки и новые строки - это то, как они должны быть отформатированы, поэтому не обращайте на это внимания). Итак, насколько я понимаю, моя программа читает ctrl + D
как else в моих циклах while. Итак, есть идеи, почему это так?
DecToBin
? Очень маловероятно, что это вызывает это. - person klutt   schedule 14.03.2021ctrl + D
, он остановится и напечатает операторы вне цикла while? - person osito_solito   schedule 14.03.2021scanf
преуспеет, делу не поможет. Бессмысленно делать что-либо после этого утверждения, если результат вызова не равен1
(и, возможно, это должно учитываться в вашем управлении циклом). - person WhozCraig   schedule 14.03.2021