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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> хде ашипка? 
:(
    Опции темы
cooper123
Дата 30.7.2007, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



для gcc 
праграмма не работает тоесть выдает не правильный результат типа большое целое число  а не то которое стоит в строке.  почему?
пробывал gcc в виндах. cygwin, потом у меня есть devc++
думал может ошибка в системе ( у меня вин2000 немецкий) установил дебиан свежий. тоже не то показывает. 
майкрософтовскую студию 2005 пока не установил. (не хочу ихний эксплорер)

чо посоветуете, ап какую  стенку бится?

Код

#include <stdio.h>
#include <math.h>
#include <stdafx.h>

int  main(void)
{

  char *s;
  double x;
  float y;

  s=" 1.12345";
  x=atof(s);
  printf("111  %e\t",x);

  s="1.2345";
  x=atof(s);
  printf("2222  %f \t",x);

  s=" 1.12345";
  y=atof(s);
  printf("111  %e\t",y);

  s="1.2345";
  y=atof(s);
  printf("2222  %f \t",y);

  return 0;

}


Это сообщение отредактировал(а) cooper123 - 30.7.2007, 16:22
PM MAIL   Вверх
zkv
Дата 30.7.2007, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

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



Код

 printf("111  %le\t",x);
  printf("2222  %lf \t",x);
  printf("111  %le\t",x);
  printf("2222  %lf \t",x);

PM MAIL   Вверх
cooper123
Дата 30.7.2007, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



не критичная ошибка, тоже не работает. увы. 
PM MAIL   Вверх
zkv
Дата 30.7.2007, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

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



Цитата(cooper123 @  30.7.2007,  15:19 Найти цитируемый пост)
не критичная ошибка

достаточно критичная, чтобы появились симптомы как у тебя 
Цитата(cooper123 @  30.7.2007,  15:19 Найти цитируемый пост)
тоже не работает.

в чем выражается? Все так же осталось?
Кстати, в последних двух y подразумевался? 
Код

printf("111  %le\t",x);
printf("2222  %lf \t",x);
printf("111  %e\t",y);
printf("2222  %f \t",y);

PM MAIL   Вверх
cooper123
Дата 30.7.2007, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



s="1.2345"
x=atof(s);
а на консоле печатается х=309237632.0000

а должно быть х=1.2345

Добавлено через 5 минут и 41 секунду
программка собственная тестовая, потому как я программирую в другой системе и захотелось проверить
производительность запрограмировав некоторые функции на си по идее самое быстрое . Но для начала надо прочитать данные из файла. ну и самое простое прочитать это самое число с дробной частью. а оно читает но выдает вот такой результат. почему не знаю. Казалось бы самое элементарное. 
как получится присвою себе гордое звание чайника. а пока даже этого не получается. 

увы....

Добавлено через 8 минут и 3 секунды
памахите....
PM MAIL   Вверх
JackYF
Дата 30.7.2007, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



не знаю, что там у тебя... вот рабочая версия твоей программы, проверено на g++ 4.1.2:

Код

#include <stdio.h>                                                                                                                                                                 
#include <math.h>                                                                                                                                                                  
#include <stdlib.h>                                                                                                                                                                
                                                                                                                                                                                   
int  main(void)                                                                                                                                                                    
{                                                                                                                                                                                  
                                                                                                                                                                                   
  char *s;                                                                                                                                                                         
  double x;                                                                                                                                                                        
  float y;                                                                                                                                                                         
                                                                                                                                                                                   
  s=" 1.12345";                                                                                                                                                                    
  x=atof(s);                                                                                                                                                                       
  printf("111  %f \t",x);                                                                                                                                                          
                                                                                                                                                                                   
  s="1.2345";                                                                                                                                                                      
  x=atof(s);                                                                                                                                                                       
  printf("2222  %f \t",x);                                                                                                                                                         
                                                                                                                                                                                   
  s=" 1.12345";                                                                                                                                                                    
  y=atof(s);                                                                                                                                                                       
  printf("111  %f \t",y);                                                                                                                                                          
                                                                                                                                                                                   
  s="1.2345";                                                                                                                                                                      
  y=atof(s);                                                                                                                                                                       
  printf("2222  %f \t",y);                                                                                                                                                         
                                                                                                                                                                                   
  printf("\n");                                                                                                                                                                    
  return 0;                                                                                                                                                                        
                                                                                                                                                                                   
}          



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
cooper123
Дата 30.7.2007, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



может быть я не так компилирую 

gcc prob.c -o prob
PM MAIL   Вверх
bsa
Дата 30.7.2007, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Вообще-то, спецификаторы %e и %f подразумевают аргумент типа double. К ним не применяются модификаторы l. Только L (long doble).
Думаю, у тебя проблемы из-за того, что ты используешь float там, где надо использовать double, и double, где должно быть long double.
PM   Вверх
zkv
Дата 30.7.2007, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

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



bsa, в студии для корректной работы следует для double указывать формат с l или с L (без разницы вроде) в начале
PM MAIL   Вверх
cooper123
Дата 30.7.2007, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



но если JackYF приводит рабочую версию программы а она у меня не идет то видимо в другом в чем то. 

PM MAIL   Вверх
powerfox
Дата 30.7.2007, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

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



cooper123

M
powerfox
Пожалуйста, используйте теги для подсветки синтаксиса и отредактируйте название темы (на нашем форуме запрещён "паддонский" язык)



--------------------
user posted image
PM WWW   Вверх
cooper123
Дата 30.7.2007, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



думаю с  компиляцией что то не то. только вот как компилировать с g++  вместо gcc я не представляю.

Добавлено через 5 минут и 32 секунды
powerfox
 отредоктировать название не получилось.
PM MAIL   Вверх
powerfox
Дата 30.7.2007, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

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



Цитата(JackYF @  30.7.2007,  16:35 Найти цитируемый пост)
#include <math.h>   

Зачем этот заголовок?

Поправленный код JackYF'a:
Код

#include <stdio.h>                                                                                                                                                                 
#include <math.h>                                                                                                                                                                  
#include <stdlib.h>                                                                                                                                                                
                                                                                                                                                                                   
int  main(void)                                                                                                                                                                    
{                                                                                                                                                                                  
                                                                                                                                                                                   
  char *s;                                                                                                                                                                         
  double x;                                                                                                                                                                        
  float y;                                                                                                                                                                         
                                                                                                                                                                                   
  s=" 1.12345";                                                                                                                                                                    
  x=atof(s);                                                                                                                                                                       
  printf("111  %g \t",x);                                                                                                                                                          
                                                                                                                                                                                   
  s="1.2345";                                                                                                                                                                      
  x=atof(s);                                                                                                                                                                       
  printf("2222  %g \t",x);                                                                                                                                                         
                                                                                                                                                                                   
  s=" 1.12345";                                                                                                                                                                    
  y=atof(s);                                                                                                                                                                       
  printf("111  %f \t",y);                                                                                                                                                          
                                                                                                                                                                                   
  s="1.2345";                                                                                                                                                                      
  y=atof(s);                                                                                                                                                                       
  printf("2222  %f \t",y);                                                                                                                                                         
                                                                                                                                                                                   
  printf("\n");                                                                                                                                                                    
  return 0;                                                                                                                                                                        
                                                                                                                                                                                   } 


Добавлено через 2 минуты и 32 секунды
Цитата(cooper123 @  30.7.2007,  17:08 Найти цитируемый пост)
думаю с  компиляцией что то не то. только вот как компилировать с g++  вместо gcc я не представляю.


Цитата(cooper123 @  30.7.2007,  17:08 Найти цитируемый пост)
powerfox
 отредоктировать название не получилось. 

Для этого нужно выбрать редактирование первого поста.


Цитата(cooper123 @  30.7.2007,  17:08 Найти цитируемый пост)
думаю с  компиляцией что то не то. только вот как компилировать с g++  вместо gcc я не представляю.

Так же. Но это извращение. Зачем компилировать Си код компилятором С++.



--------------------
user posted image
PM WWW   Вверх
cooper123
Дата 30.7.2007, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



остался от предыдущих экспериментов. вроде не мешает. 
но можно и убрать. в данном случае не помогает. ничто. 


Для этого нужно выбрать редактирование первого поста.

пытался не получилось. сорри. 



Это сообщение отредактировал(а) cooper123 - 30.7.2007, 16:24
PM MAIL   Вверх
powerfox
Дата 30.7.2007, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

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



cooper123, посмотри мой код. Там всё нормально (кроме последних 2-х чисел, так ты выбрал для них тип флоат). Если им тоже задать %g вместо %f, то нули тоже обрежутся. Читай про форматированный вывод - компилятор тут нипричём.

Это сообщение отредактировал(а) powerfox - 30.7.2007, 16:25


--------------------
user posted image
PM WWW   Вверх
cooper123
Дата 30.7.2007, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



дело не  в форматировании, форматирование не изменяет число оно может быть уменьшает точность или читаемость но как из 1.2345 получается что то вроде 3098746454 ? 

PM MAIL   Вверх
powerfox
Дата 30.7.2007, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

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



Цитата(cooper123 @  30.7.2007,  17:25 Найти цитируемый пост)
дело не  в форматировании, форматирование не изменяет число оно может быть уменьшает точность или читаемость но как из 1.2345 получается что то вроде 3098746454 ?

Покажи полностью свой код и как компилируешь. Компилятор какой (версия и где брал)?


--------------------
user posted image
PM WWW   Вверх
bsa
Дата 30.7.2007, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(zkv @ 30.7.2007,  16:06)
bsa, в студии для корректной работы следует для double указывать формат с l или с L (без разницы вроде) в начале

На сколько я знаю, Visual Studio (о ней речь?) под Linux и другими Unix-like системами не работает и, более того, даже не компилит под них.
Цитата(man 3 printf)

      e,E    The double argument is rounded and converted in the style [-]d.ddde[-]dd where there is one digit before the deci-
             mal-point character and the number of digits after it is equal to the precision; if the precision is missing, it
             is taken as 6; if the precision is zero, no decimal-point character appears.  An E conversion uses the letter  E
             (rather  than  e)  to introduce the exponent.  The exponent always contains at least two digits; if the value is
             zero, the exponent is 00.

      f,F    The double argument is rounded and converted to decimal notation in the style [-]ddd.ddd, where  the  number  of
             digits  after the decimal-point character is equal to the precision specification.  If the precision is missing,
             it is taken as 6; if the precision is explicitly zero, no decimal-point character appears.  If a  decimal  point
             appears, at least one digit appears before it.

             (The SUSv2 does not know about F and says that character string representations for infinity and NaN may be made
             available.  The C99 standard specifies `[-]inf' or `[-]infinity' for infinity, and a string starting with  `nan'
             for NaN, in the case of f conversion, and `[-]INF' or `[-]INFINITY' or `NAN*' in the case of F conversion.)


cooper123, спецификаторы нужны не только для задания форматирования, но и для определения того, что ты указал в качестве параметров. Поэтому нельзя надеяться на корректность, когда ты указываешь, что в параметрах у тебя double (8 байт), а передаешь float (4 байта).

Это сообщение отредактировал(а) bsa - 30.7.2007, 16:36
PM   Вверх
cooper123
Дата 30.7.2007, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



в данный момент вариант такой

Код

#include <math.h>
#include <stdio.h>


int main(void)
{
  char *ss;
  double x;
  float y;
  ss="1.2345";
  x=atof("1.2345");
  y=atof("1.2345");
  printf("m12 now y ist:  %f \n",y);
  printf("m12 now x ist:  %f \n",x);
  return 0;
}



sytem  debial (last net intallation)

gcc 4:4.1.1-15   //установил через пакетный менеджер из сети. 

сомпиляция делалась так: 

gcc /dir1/prob -o /dir2/prob



Это сообщение отредактировал(а) cooper123 - 30.7.2007, 16:41
PM MAIL   Вверх
bsa
Дата 30.7.2007, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Попробуй так:
Код
#include <math.h>
#include <stdio.h>


int main(void)
{
  char *ss;
  double x;
  float y;
  ss="1.2345";
  x=atof("1.2345");
  y=atof("1.2345");
  printf("m12 now y ist:  %f \n", (double)y);
  printf("m12 now x ist:  %f \n",x);
  return 0;
}

PM   Вверх
powerfox
Дата 30.7.2007, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

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



cooper123, и поменяй %f на %g, как я тебе говорил.


--------------------
user posted image
PM WWW   Вверх
cooper123
Дата 30.7.2007, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



bsa (double)y не помогло.  и %g тоже не помогло

насчет форматирования Вы конечно же правы. но в данном случае налицо ошибка начинающего. более грубая  нежели форматирование. Вот только в чем она заключается?

Это сообщение отредактировал(а) cooper123 - 30.7.2007, 16:50
PM MAIL   Вверх
powerfox
Дата 30.7.2007, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

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



cooper123, попробуй скомпилировать с помощью g++ (замени просто gcc).
А ты уверен, что ты тот исполняемый файл запускаешь? Как ты запускаешь приложение?


--------------------
user posted image
PM WWW   Вверх
cooper123
Дата 30.7.2007, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



для уверенности я пишу что нибудь типа "y now is" и когда уверенность пропадает пишу что нибудь другое. 

g++ сщчас попробую, только видимо мне его еще установить надо, потому как перед этим пробывал и не получилось. 

установил и сразу получилось. сначала на ++ и потом на сс 
странно а в чем дело то?

Добавлено @ 17:03
в общем спасибо всем за помощь чайнику. 

урааааа!!!!
будем дальше двигаться 

спасибо еще раз. 

сщчас попробую на виндах тоже г++ установить. 

а на cygwin такой фокус не проходит. хотя может быть дело в виндах. 
не прошел, просто старый екзек был, удалил его. 
вот видь оказывается си без плюсов нету. 


спасибо пауерфокс - ты настоящий друх

та же бадяга на mingw и просто гсс в командном окне, хотя он берется из mingw. 


Это сообщение отредактировал(а) cooper123 - 30.7.2007, 17:34
PM MAIL   Вверх
powerfox
Дата 30.7.2007, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

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



Цитата(cooper123 @  30.7.2007,  17:56 Найти цитируемый пост)
спасибо пауерфокс - ты настоящий друх

Не за что.

Очень странная ошибка...


--------------------
user posted image
PM WWW   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

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


 




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


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

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