Цикл должен прекращаться после пробела, но программа не реагирует и не выходит из цикла - C (СИ)
Формулировка задачи:
#include <stdio.h>
int main()
{
char num[10];
FILE *file;
if ((file = fopen("1.txt", "w")) == NULL)
printf("File can not open or create\n");
else
{
for (;;)
{
scanf("%s", num);
if (num == ' ')
break;
fprintf(file, "%s", num);
}
}
fclose(file);
}Решение задачи: «Цикл должен прекращаться после пробела, но программа не реагирует и не выходит из цикла»
textual
Листинг программы
#include <stdio.h>
int main()
{
char num[10];
char c;
int i;
FILE *file;
if ((file = fopen("1.txt", "w")) == NULL)
printf("File can not open or create\n");
else
{
for (i=0;;i++)
{
c=getchar();
if (c == ' ')
break;
num[i]=c;
}
num[i]=0;
fprintf(file, "%s", num);
}
fclose(file);
}
Объяснение кода листинга программы
- В начале программы подключается стандартная библиотека ввода-вывода
. - Затем определена функция main(), которая является точкой входа в программу.
- Создаются переменные:
- char num[10] - массив символов на 10 элементов для хранения числового значения;
- char c - символ, который будет использоваться в цикле;
- int i - переменная счетчик для цикла;
- FILE *file - указатель на файл, который будет использоваться для записи данных.
- Выполняется проверка на открытие файла
1.txtв режиме записиw. Если файл не может быть открыт или создан, выводится сообщение об ошибке. - Если файл успешно открывается, выполняется цикл for, который будет выполняться до тех пор, пока не встретит пробел.
- Внутри цикла считывается очередной символ с помощью функции getchar().
- Если считанный символ является пробелом, выполняется операция break, чтобы выйти из цикла.
- Если считанный символ не является пробелом, он добавляется в массив num.
- После окончания цикла, в массив num добавляется нулевой символ, чтобы обозначить конец строки.
- Записанное значение в массиве num затем записывается в файл с помощью функции fprintf().
- В конце программы файл закрывается с помощью функции fclose().
- Значение переменной file не используется в коде, но оно должно быть равно NULL после вызова функции fclose().