Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> С - программа не ждет ввода 
V
    Опции темы
Evgeni
Дата 5.10.2009, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 19.11.2006

Репутация: нет
Всего: нет



Всем привет, делаю по учебе простенькое задание и столкнулся с проблемой что программа не ждет ввода данных
т.е. запуская ее таким образом 
./test.exe inputtest.txt  
все прекрасно работает, но мне нужно чтобы можно было ввести данные после запуска программы те
./test.exe 
inputtest.txt  
по заданию ввод должен быть через аргументы в фции main

Код

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

//converts letters
char translate(char ch){
     char ret = ch;
     if(ch=='1'){
                 ret = 'l';
                 }
     else if(ch=='3'){
                 ret = 'e';
                 }
     else if(ch=='4'){
                 ret = 'a';
                 }
     else if(ch=='7'){
                 ret = 't';
                 }
     else if(ch=='0'){
                 ret = 'o';
                 }           
     else {
          ret = tolower(ch);               
          }                                            
     return ret;            
     }

//checks if there is entered a file, file must be in .txt format
//returns 1 if entered a file name
int check_state(char state[]){
    int ret = 0;
    char check[4] = ".txt";
    char comp[10];
    int len = strlen(state);
    strcpy(comp, &state[len-4]);
    if(strcmp(comp,check)==0) ret = 1; 
    return ret;
}

int main(int argc, char ** argv) {
    FILE *in, *out;    
    //Checks if there is only input file, reads it and prints translated text to the screen
    if(argc == 2 && check_state(argv[1])==1){
                if ( (in=fopen(argv[1],"r")) == NULL) {
                        fprintf (stderr,"Cannot open reading file: %s\n", argv[1]);
                        exit(EXIT_FAILURE);
                        }
                else {
                         char c;
                         while ((c=fgetc(in))!=EOF){
                                     printf("%c", translate(c));                
                                    }
                         }
                 fclose(in);
                }
    //Checks if there are both input and output files, reads input file and saves translated text to the output file                       
    else if (argc == 3 && check_state(argv[1])==1 && check_state(argv[2])==1){
                        if ( (in=fopen(argv[1],"r")) == NULL) {
                                    fprintf (stderr,"Cannot open reading file: %s\n", argv[1]);
                                    exit(EXIT_FAILURE);
                                    }
                        if ( (out=fopen(argv[2],"w")) == NULL) {
                                    fprintf (stderr,"Cannot open reading file: %s\n", argv[2]);
                                    exit(EXIT_FAILURE);
                                    }               
                        else {
                                    char c;
                                    while ((c=fgetc(in))!=EOF){
                                                   printf("%c", translate(c));  
                                                   putc(translate(c),out);              
                                                  }
                                    }
                                    fclose(in);
                                    fclose(out);            
                        }                   
                        else {
                                   int i,j;
                                   for(i=1;i<argc;i++){
                                               for(j=0;j<strlen(argv[i]);j++){
                                                               printf("%c", translate(argv[i][j])); 
                                                               }
                                               printf(" ");
                                               }        
                       }
    return 0;

}



надеюсь на вашу помощь, спасибо  smile 

Это сообщение отредактировал(а) Evgeni - 5.10.2009, 12:22
PM MAIL   Вверх
Andrey44
Дата 5.10.2009, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 2
Всего: 26



Evgeni, где вас так учили форматировать код?

Добавлено через 6 минут и 6 секунд
В смысле? Вам надо в запущеной консоли ввести путь к файлу? 
Или через параметры командной строки?


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Evgeni
Дата 5.10.2009, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 19.11.2006

Репутация: нет
Всего: нет



Andrey44, извиняюсь если плохо читается =)
надо запустить программу и после этого написать имя файла
это наверное 1 вариант
вот так
./test.exe(запускается программа) 
inputtest.txt(пишем имя файла)
PM MAIL   Вверх
xvr
Дата 5.10.2009, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Evgeni @ 5.10.2009,  10:46)
надо запустить программу и после этого написать имя файла
это наверное 1 вариант
вот так
./test.exe(запускается программа) 
inputtest.txt(пишем имя файла)

Это противоречит заданию из 1го поста:
Цитата

по заданию ввод должен быть через аргументы в фции main
т.к. 'аргументы в фции main' никоим образом не вводятся с консоли ПОСЛЕ запуска программы.
Если же нужно реализовать обе возможности, то их нужно явно обрабатывать - в программе проверять количество поданных аргументов (через argc) и читать со стандартного ввода (через cin или gets), если их не хватает

PM MAIL   Вверх
Evgeni
Дата 5.10.2009, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 19.11.2006

Репутация: нет
Всего: нет



xvr, вот это мне и не понятно...
а есть ли какой то способ перезапустить программу и "заставить" ее ждать новых параметров ?  

PM MAIL   Вверх
bsa
Дата 5.10.2009, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196




M
bsa
Evgeni, прочти Оформление кода и следуй рекомендации, пожалуйста.

PM   Вверх
Andrey44
Дата 5.10.2009, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 2
Всего: 26



Цитата(Evgeni @  5.10.2009,  12:11 Найти цитируемый пост)
и "заставить" ее ждать новых параметров ?  

Можно сделать цикл с выходом по условию


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Evgeni
Дата 5.10.2009, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 19.11.2006

Репутация: нет
Всего: нет



Andrey44, можно подробнее, если не сложно ?
у меня в main есть цикл, если нет аргументов то можно добавить 
Код

else if(argc==1){...}

а что писать в теле цикла ?
PM MAIL   Вверх
bsa
Дата 5.10.2009, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Код
int main()
{
   do {
      //код программы
   } while(<нужен "перезапуск">);
}


Это сообщение отредактировал(а) bsa - 5.10.2009, 13:52
PM   Вверх
xvr
Дата 5.10.2009, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Evgeni @ 5.10.2009,  12:11)
xvr, вот это мне и не понятно...
а есть ли какой то способ перезапустить программу и "заставить" ее ждать новых параметров ?

Мдя  smile 
Код

int main(int argc, char** argv)
{
 FILE *in, *out=stdout;
 switch(argc)
  {
   default: out=fopen(argv[2],"wt");
   case 2: in=fopen(argv[1],"rt"); break;
   case 1:
     {
      printf("Input file> ");
      char n[1024];
      gets(n);
      in=fopen(n,"rt");
      break;
     }
  }
 int c;
 while ( (c=fgetc(in)) != EOF)
  fprintf(out,"%c",translate(c));
 fclose(in); fclose(out);
 return 0;
}



Это сообщение отредактировал(а) xvr - 5.10.2009, 15:41
PM MAIL   Вверх
Evgeni
Дата 5.10.2009, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 19.11.2006

Репутация: нет
Всего: нет



не знаю, возможно я создаю проблемы на пустом месте, и нужно было сразу воспользоваться gets...
в общем будем считать вопрос решенным, всем спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0520 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.