Остановка бесконечного цикла - C (СИ)
Формулировка задачи:
Проблема следующая: мне надо бесконечно зациклить первые N чисел некоторой последовательности, например последовательности Фибоначчи, и останавливать цикл нажатием на клавишу 0. И всё вроде бы работает, если число N не содержит нуля. Причём использовать 0 на вспомогательной клавиатуре нельзя. Как поправить код?
Или это вообще нереально реализовать?
#include <stdio.h>
#include <locale.h>
#include <windows.h>
int func1(int N){
if(N == 1) {
printf("0 \n");
}
else if(N == 2){
printf("0 \n");
printf("1 \n");
}
}
int func2(int a, int b, int c, int N) {
int i;
printf("0 \n");
printf("1 \n");
for(i = 0; i < N-2; ++i){
c=a+b;
a=b;
b=c;
printf("%d\n", c);
}
printf("\n");
}
int main() {
setlocale (LC_ALL, "Rus");
int a=0;
int b=1;
static int c;
int N;
int i;
printf("Введите N=");
scanf("%d", &N);
while(!GetAsyncKeyState(0x30)) {
func1(N);
func2(a,b,c,N);
}
}Решение задачи: «Остановка бесконечного цикла»
textual
Листинг программы
#include <stdio.h>
#include <locale.h>
#include <windows.h>
int func1(int N){
if(N == 1) {
printf("0 \n");
}
else if(N == 2){
printf("0 \n");
printf("1 \n");
}
}
int func2(int a, int b, int c, int N) {
int i;
printf("0 \n");
printf("1 \n");
for(i = 0; i < N-2; ++i){
c=a+b;
a=b;
b=c;
printf("%d\n", c);
}
printf("\n");
}
int main() {
setlocale (LC_ALL, "Rus");
int a=0;
int b=1;
static int c;
int N;
int i;
printf("Ââåäèòå N=");
scanf("%d", &N);
GetAsyncKeyState(0x30);
while(2 > 1) {
func1(N);
func2(a,b,c,N);
if(GetAsyncKeyState(0x30)){
break;
}
}
}
Объяснение кода листинга программы
- Включение необходимых заголовочных файлов:
, , . - Определение двух функций: func1, func2.
- Установка начальных значений переменных: a=0, b=1, c=0.
- Ввод числа N с клавиатуры с помощью функции scanf.
- Получение состояния клавиши
0с помощью функции GetAsyncKeyState. - Запуск двух функций: func1, func2.
- Проверка состояния клавиши
0в цикле while. - Выход из цикла при нажатии клавиши
0.