Вернуться   CoderX :: Forums > Основные форумы > Программинг
Войти через OpenID

Программинг Форум для тем связанных с программированием

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 20.11.2011, 02:34   #1
Местный
 
Регистрация: 10.02.2010
Сообщений: 141
Сказал Спасибо: 33
Имеет 3 спасибок в 3 сообщенях
loader159 пока неопределено
По умолчанию Вопрос Ответ

Если нельзя создавать такие темы удалите.

Нужна помощь. Почему переменная " i " первый раз выводит правельное количество 8-рок ( 2 штуки ) а потом на 1 единицу меньше? (9 4- штуки. а печатает 3 )
вот содержимое файла mix2.txt
Оффтоп

PHP код:
#include <stdlib.h>
#include <stdio.h>
#include <Windows.h>
#include "iostream"
main()
{      
 
FILE fi
  
FILE fo;
   
fi fopen("mix2.txt","rt");  
   
fo fopen("mix3.txt","wt");
   
int n 080
 
 while (
5<10){
     
fscanffi"%d", &);
     if( 
== )
     {
         
printf("%d\n",n);
         ++
i;
         }
     else
     {
        
fprintffo"%d\n");
        
printf("%d\n",i);
        
x++;
        
0
         }
         
Sleep(1000);
}
     
Sleep(5000); 

   
fclose(fi); 
   
fclose(fo);
Sleep(5000); 
__________________
© alexteam: раньше чем получиццо - не получиццо

Последний раз редактировалось loader159, 20.11.2011 в 03:04.
loader159 вне форума   Ответить с цитированием
Старый 20.11.2011, 02:41   #2
Рыцарь
 
Аватар для alexteam
 
Регистрация: 07.03.2009
Сообщений: 9,139
Сказал Спасибо: 70
Имеет 2,820 спасибок в 1,735 сообщенях
alexteam на пути к лучшему
По умолчанию

Цитата:
x++;
i = 0;
у нас тут как бы не совсем 0 элементов... 1 уже есть...
__________________
L2Ext - project closed.
alexteam вне форума   Ответить с цитированием
Старый 20.11.2011, 03:16   #3
Местный
 
Регистрация: 10.02.2010
Сообщений: 141
Сказал Спасибо: 33
Имеет 3 спасибок в 3 сообщенях
loader159 пока неопределено
По умолчанию

Цитата:
Сообщение от alexteam Посмотреть сообщение
у нас тут как бы не совсем 0 элементов... 1 уже есть...
Я тоже сразу так подумал.
i= 1;
количество повторяющихся чисел выводит верно, но в условие если n != x обязательно должно напечатать 0.

PHP код:
   if( <= )
     {
         
printf("%d\n",n);
         ++
i;
         } 
принтует на 1-ну меньше. (не 4ри 9ки а 3)

Добавлено через 12 минут
Все понял почему одну цифру не досчитывал. переделал все заработало
PHP код:
#include <stdlib.h>
#include <stdio.h>
#include <Windows.h>
#include "iostream"
main()
{      
 
FILE fi
  
FILE fo;
   
fi fopen("mix2.txt","rt"); 
   
fo fopen("mix3.txt","wt");
   
int n 050
  
fscanffi"%d", &);
 while (
5<10){
     
     if( 
== )
     {
         ++
i;
         
printf("%d\n",n);
         
fscanffi"%d", &);
         }
     else
     {
        
fprintffo"%d\n");
        
printf("%d\n",i);
        
x++;
        
0
         }
         
Sleep(1000);
}
     
Sleep(5000); 

   
fclose(fi); 
   
fclose(fo);
Sleep(5000);




  return 
0;


часто сканил mix2.txt
Код:
fscanf( fi, "%d", &n );
__________________
© alexteam: раньше чем получиццо - не получиццо

Последний раз редактировалось loader159, 20.11.2011 в 03:19. Причина: Добавлено сообщение
loader159 вне форума   Ответить с цитированием
Старый 20.11.2011, 03:28   #4
Рыцарь
 
Аватар для alexteam
 
Регистрация: 07.03.2009
Сообщений: 9,139
Сказал Спасибо: 70
Имеет 2,820 спасибок в 1,735 сообщенях
alexteam на пути к лучшему
По умолчанию

Цитата:
fscanf( fi, "%d", &n );
while (5<10){
while(fscanf( fi, "%d", &n )) ?
__________________
L2Ext - project closed.
alexteam вне форума   Ответить с цитированием
Старый 20.11.2011, 03:32   #5
Местный
 
Регистрация: 10.02.2010
Сообщений: 141
Сказал Спасибо: 33
Имеет 3 спасибок в 3 сообщенях
loader159 пока неопределено
По умолчанию

Цитата:
Сообщение от alexteam Посмотреть сообщение
while(fscanf( fi, "%d", &n )) ?
fscanf( fi, "%d", &n );
while( !feof(fi) ) вот =)
__________________
© alexteam: раньше чем получиццо - не получиццо
loader159 вне форума   Ответить с цитированием
Старый 20.11.2011, 03:35   #6
Рыцарь
 
Аватар для alexteam
 
Регистрация: 07.03.2009
Сообщений: 9,139
Сказал Спасибо: 70
Имеет 2,820 спасибок в 1,735 сообщенях
alexteam на пути к лучшему
По умолчанию

2 варианта
1. пока есть что читать из файла и это чтото соотвествует формату
2. пока не конец файла

спорно.
__________________
L2Ext - project closed.
alexteam вне форума   Ответить с цитированием
Старый 20.11.2011, 03:56   #7
Местный
 
Регистрация: 10.02.2010
Сообщений: 141
Сказал Спасибо: 33
Имеет 3 спасибок в 3 сообщенях
loader159 пока неопределено
По умолчанию

while(fscanf( fi, "%d", &n )) ;
после того как сосканила последние число из mix2.txt, программа не продолжается тупо висит. не переходит к этим строкам
Код:
   Sleep(5000); 

   fclose(fi); 
   fclose(fo);
Sleep(5000);
и все равно на одну меньше выводит количество цифер.

алекс спасибо за помощь, одну часть задачи вроде решил. завтра продолжу 2ю
__________________
© alexteam: раньше чем получиццо - не получиццо
loader159 вне форума   Ответить с цитированием
Старый 21.11.2011, 21:57   #8
Новичок
 
Регистрация: 24.11.2010
Сообщений: 9
Сказал Спасибо: 3
Имеет 2 спасибок в 2 сообщенях
etoken пока неопределено
По умолчанию

while(fscanf( fi, "%d", &n ) != EOF ) в случае еофа фскан вернет "-1" и цикл будет бесконечным ибо "-1" это тоже не false

по поводу i:
if(i){
printf("%d",i+1)
}
else{
printf("0");
}
не красиво но достигнешь желаемого )

З.ы. кстати а зачем эти безумные слипы ?

Последний раз редактировалось etoken, 21.11.2011 в 22:00.
etoken вне форума   Ответить с цитированием
Старый 29.11.2011, 00:53   #9
Пользователь
 
Регистрация: 04.11.2009
Сообщений: 44
Сказал Спасибо: 57
Имеет 3 спасибок в 2 сообщенях
vahes пока неопределено
По умолчанию

напишу сюда, чтобы не разводить флуд.
Столкнулся с проблемой считывания с памяти данных типа WideString;
процедура вызывается при приходе пакета UserInfo (UserInfo:d(X)d(Y)d(Z)d(Heading)d(ObjectID)s(Name) ...) где PPck указательна пакет без ID
Delphi Код:
Procedure OnUserInfo(PPck: pointer); begin UserInfo.X:=PDword(Dword(PPck))^; UserInfo.Y:=PDword(Dword(PPck)+4)^; UserInfo.Z:=PDword(Dword(PPck)+8)^; UserInfo.ObjectID:=PDword(Dword(PPck)+16)^; UserInfo.Name{<-тип WideString}:=PWideString(Dword(PPck)+20)^; //здесь ошибка Out Of Memory ...
Подозреваю надо как-то выделять память под это дело, или неправильно читаю. Подскажите плз
vahes вне форума   Ответить с цитированием
Старый 29.11.2011, 01:51   #10
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

vahes, PWideString - это указатель на WideString который сам по сути является указателем, то есть указатель на указатель получается...
чтоб работало надо так:
delphi Код:
Procedure OnUserInfo(PPck: pointer); begin UserInfo.X:=PDword(Dword(PPck))^; UserInfo.Y:=PDword(Dword(PPck)+4)^; UserInfo.Z:=PDword(Dword(PPck)+8)^; UserInfo.ObjectID:=PDword(Dword(PPck)+16)^; UserInfo.Name:=PWideChar(Dword(PPck)+20); ...
и компилятор уже сам позаботится о превращении PWideChar в WideString
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
За это сообщение xkor нажился спасибкой от:
Ответ

  CoderX :: Forums > Основные форумы > Программинг



Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 00:30.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!