Модераторы: 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   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

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


 




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


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

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