Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
102 / 95 / 104
Регистрация: 29.11.2009
Сообщений: 407
1

Программа не выполняет то что должна

28.12.2009, 16:33. Показов 1052. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
помогите разобраться... программа не делает что должна (((
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *f, *Out;
char fn[20],result[20];
int ch;
printf("Enter File Name: \n");
scanf("%s", fn);
if ((f=fopen(fn,"rt"))==NULL)
{
printf("Error! This file don`t find! \n");
printf("Enter correct file name:");
scanf("%s",fn);
if ((f=fopen(fn,"rt"))==NULL){printf("Try again later!\n");}
}
printf("Enter result file name: \n");
scanf("%s", result);
if ((Out=fopen(result,"wt"))==NULL)
{
printf("There is no file with this name!");
}
while ((ch=fgetc(f))!=EOF)
{
while(ch==' ')
{}
while(ch!=' ')              //что бы небыло в файле печатает в выходной один символ
{fputc (ch,Out);}        // пока не остановишь программу ((( что делать?
fputc (' ',Out);                            
}
printf("End of program");
fclose(fn);
fclose(result);
return 0;
getchar();
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.12.2009, 16:33
Ответы с готовыми решениями:

Что выполняет программа?
Что делает эта программа? #define K 50 int y, n, m; /* ввод y */ n=0; m=y; for(j=0; j&lt;K;...

Что выполняет программа
Program A; Var N,S:integer; Begin readln(N); S:=0; While N&lt;&gt;0 do Begin S:=N mod 10+S; N:=N div...

Что выполняет данная программа?
Задание было из книги &quot;Жмакин - Архитектура ЭВМ&quot; Нужно было записать команды в программу &quot;МОДЕЛЬ...

Определить, что выполняет программа
//vichislenie NOD #include&lt;iostream.h&gt; #include&lt;conio.h&gt; #include&lt;math.h&gt; int fnod(int a,int b)...

13
159 / 156 / 47
Регистрация: 29.04.2009
Сообщений: 636
28.12.2009, 17:30 2
C++
1
int ch;
C++
1
while(ch!=' ')
Как можно приравнять int?
и что такое fputc? вы имели ввиду fputs(chat *str,FIle *f)?
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
28.12.2009, 20:18 3
Цитата Сообщение от Sekt Посмотреть сообщение
Как можно приравнять int?
А что тебя смущает?
C++
1
2
3
int ch = 32;
std::cout<<(ch == ' ' ? '1' : '0')<<std::endl;
std::cout<<(--ch == ' ' ? '1' : '0')<<std::endl;
2
159 / 156 / 47
Регистрация: 29.04.2009
Сообщений: 636
28.12.2009, 20:21 4
Я не знал что такие преобразования эффективный.
0
102 / 95 / 104
Регистрация: 29.11.2009
Сообщений: 407
29.12.2009, 01:38  [ТС] 5
так почему он цикл выполняет до бесконечности мне скажет кто нибудь ?

Добавлено через 1 минуту
Цитата Сообщение от Sekt Посмотреть сообщение
C++
1
int ch;
C++
1
while(ch!=' ')
Как можно приравнять int?
и что такое fputc? вы имели ввиду fputs(chat *str,FIle *f)?
fputc печатает не строку в поток а символ типа int
0
Эксперт С++
4727 / 2548 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
29.12.2009, 10:19 6
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

См. коментарии
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *f, *Out;
char fn[20],result[20];
int ch;
printf("Enter File Name: \n");
scanf("%s", fn);
if ((f=fopen(fn,"rt"))==NULL)
{
printf("Error! This file don`t find! \n");
printf("Enter correct file name:");
scanf("%s",fn);
if ((f=fopen(fn,"rt"))==NULL){printf("Try again later!\n");}
}
printf("Enter result file name: \n");
scanf("%s", result);
if ((Out=fopen(result,"wt"))==NULL)
{
printf("There is no file with this name!");
}
while ((ch=fgetc(f))!=EOF)
{
//while(ch==' ')
//{}
//while(ch!=' ')// вот здесь Вы сами загнали себя в цикл бесконечный. Ведь войдя в этот цикл ch не меняется, остается первым символом (не равным ' ') из входного файла
if(ch!=' ')
{fputc (ch,Out);}        // пока не остановишь программу ((( что делать?
fputc (' ',Out);                            
}
printf("End of program");
fclose(f);//
fclose(Out);//
return 0;
getchar();
}
1
102 / 95 / 104
Регистрация: 29.11.2009
Сообщений: 407
29.12.2009, 15:06  [ТС] 7
а как сделать тогда пустой цикл что бы если условие правда то он ничего не делает и идет к следующему действию?
0
Эксперт С++
4727 / 2548 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
29.12.2009, 15:13 8
Не совсем понял что Вы пишите, но я сделал же нормальный в том месте цикл с if(), и теперь все работает.
1
102 / 95 / 104
Регистрация: 29.11.2009
Сообщений: 407
29.12.2009, 15:38  [ТС] 9
допустим нужно пропускать определенные символы то бишь вы выводить в выходной файл то это будет так
C
1
if (simvol=='a'){}  // тоесть будет ли пустой цикл их пропускать либо программа зависнет?
0
Эксперт С++
4727 / 2548 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
29.12.2009, 15:44 10
Цитата Сообщение от TimeTwo Посмотреть сообщение
допустим нужно пропускать определенные символы то бишь вы выводить в выходной файл то это будет так
Не совсем понял. Но отвечу так:
Если нужно пропускать определенные символы, т.е. не записывать их в выходной файл, то тогда так:
C
1
2
3
4
if(ch!='a')
{fputc (ch,Out);}        
fputc (' ',Out);                            
}
Если нужно несколько пропускать, то так:
C
1
2
3
4
if(ch!='a' && ch!='b'  )
{fputc (ch,Out);}        
fputc (' ',Out);                            
}
Если нужно наоборот, что бы записывались в выходной файл только нужные символы, то так:
C
1
2
3
4
if(ch=='a')
{fputc (ch,Out);}        
fputc (' ',Out);                            
}
1
102 / 95 / 104
Регистрация: 29.11.2009
Сообщений: 407
29.12.2009, 16:06  [ТС] 11
мне нужно что бы программа пропускала пробелы а не печатала после каждого символа не равного пробелу их поэтому там и стояло в исходной while

вот так я хотел :
пока fgetc(file) != EOF
пока (fgetc(file) != ' ' печатаем в выходной
пока (fgetc(file) ==' ' ничего не делать пропускать их не писать,
только закончились поторные пробелы записать принудительно один
закончить цикл
0
Эксперт С++
4727 / 2548 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
29.12.2009, 16:32 12
Вот так попробуйте (сам цикл):
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int fl=0;
while ((ch=fgetc(f))!=EOF)
{
    if(ch!=' '){
        fl=1;
    fputc (ch,Out); 
    }
 
    if(ch==' ' && fl)
    {
        fputc (ch,Out); 
        fl=0;
    }     
}
1
102 / 95 / 104
Регистрация: 29.11.2009
Сообщений: 407
29.12.2009, 17:00  [ТС] 13
ооооо огромное спасибо, но спасибо в карман не положешь поэтому адрес пожалуйста презент вам на новый год
и можно еще рассказать как оно работает а то не доконца понял
0
Эксперт С++
4727 / 2548 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
30.12.2009, 05:26 14
См. коментарии:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int fl=0;
while ((ch=fgetc(f))!=EOF)
{
        if(ch!=' '){// если встречаем не пробел
                fl=1;// то fl присваиваем значение 1
        fputc (ch,Out); // и записываем его в выходной файл
        }
 
        if(ch==' ' && fl)// если встречаем пробел и fl у нас равна 1
        {
                fputc (ch,Out); // записываем пробел в выходной файл
                fl=0;// присваиваем 0 и теперь - если следующий символ снова пробел то мы сюда не попадем (условие - if(ch==' ' && fl)) 
        }     
}
0
30.12.2009, 05:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.12.2009, 05:26
Помогаю со студенческими работами здесь

Разъяснить, что выполняет программа
#include &lt;iostream&gt; static const char s={ &quot;foo&quot;, &quot;bar&quot;, }; void test(const char s) { ...

Что выполняет данная программа на Prolog
Друзья! Помогите, не могу разобраться в программе. По идее она должна из матрицы размера m*n от...

Что именно выполняет эта программа?
Прокоментируйте пожалуйста что происходит в программе со строчки : /*максимальное из чисел,...

Программа должна запомнить, что что-то уже делала
Не знаю, возможно это, или нет, но можно как-то сделать, чтобы программа сделала что-то один раз...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru