Форум: Форум C++Разное
Новые темы: 00
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите новичку!)
 
 автор: afing   (28.11.2009 в 14:51)   письмо автору
 
 

Здравствуйте друзья!
помогите новичку плз)
Есть такая задача.
Необходимо прочитать из текстового файла числа следующего вида
1 72 3 4 -5
3 5 9 767 3
5 -77 9 0 2
-7 667 4 71 3
0 7 345 3 0
и записать их в двумерный числовой массив a[i][j]. (пробелы не учитываются) Ну и далее уже работать с числами: найти произведение элементов главной диагонали и т.д....
Вобщем вот мой код)

#include "stdafx.h"
#include "stdio.h"
#include "conio.h"

int main(void)
{
int a[5][5], i, j;
FILE * fp;
fp=fopen("C:\Program Files\Microsoft Visual Studio\MyProjects\zadanie2\Debug\mas.txt", "rb"); //полный путь к файлу
for(i=0; i<5; i++)
for(j=0; j<5; j++)
while ((a[i][j] = getch()) != EOF)
{
if((a[i][j] = getch()) != (char)" ")
{
putch(a[i][j]);
printf("%d", a[i][j]);
}
}
fclose(fp);

for(i=0; i<5; i++)
for(j=0; j<5; j++)
printf("%d", a[i][j]);
return 0;
}

  Ответить  
 
 автор: heed   (29.11.2009 в 01:13)
 
   для: afing   (28.11.2009 в 14:51)
 

я тоже не намного дальше ушёл :)

#include "stdio.h"

int main(void)
{
int a[5][5], i, j;
FILE * fp;

 fp=fopen("d:\\_zzz.txt""rb"); //полный путь к файлу
 for(i=0; i<5; i++)
 {
     fscanf( fp, "%d %d %d %d %d "
         , &a[i][0], &a[i][1], &a[i][2], &a[i][3], &a[i][4]);
 }
fclose(fp);

for(i=0; i<5; i++) {
for(j=0; j<5; j++) {
printf("\t%d", a[i][j]);
}
printf("\n");
}
return 0;
}

  Ответить  
 
 автор: afing   (29.11.2009 в 14:44)   письмо автору
 
   для: heed   (29.11.2009 в 01:13)
 

Спасибо, но все равно не пашет(((
а я пробую так

#include "stdio.h"

int main(void)
{
int a[5][5], i, j;
FILE * fp;

 fp=fopen("C:\Program Files\Microsoft Visual Studio\MyProjects\zadanie2\Debug\mas.txt""rb"); //&#239;îëíûé ïóòü ê ôàéëó
 for(i=0; i<5; i++)
 {
    for(j=0; j<5; j++)
if((a[i][j] = getc(fp)) != ' 'putc(a[i][j], fp);
 }
fclose(fp);

for(i=0; i<5; i++) {
for(j=0; j<5; j++) {
printf("\t%d", a[i][j]);
}
printf("\n");
}
return 0;
}

и толку 0 все равно... есть еще какие идеи?)

  Ответить  
 
 автор: ....   (29.11.2009 в 17:42)
 
   для: afing   (29.11.2009 в 14:44)
 

Ваш код у меня первой строкой выводит 49 55 32 51 52
вместо того что в файле 1 72 3 4 -5

свой код запускал из под Visual Studio 98 AKA Visual C++ 6

в VC9 тоже всё работает , не считая предупреждений
1>Компиляция...
1>9.cpp
1>c:\_projects\vs\projects\9\9\9.cpp(8) : warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(237): см. объявление 'fopen'
1>c:\_projects\vs\projects\9\9\9.cpp(12) : warning C4996: 'fscanf': This function or variable may be unsafe. Consider using fscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(256): см. объявление 'fscanf'
..............
1>9 - ошибок 0, предупреждений 2

В VC8 решил не проверять
В DevCpp работает
В PellesC с компилятором lss тоже всё нормально скомпилировалось и работает ,
А borlandС++builder я решил пока не ставить ,) ибо мне хватает.

а это
>Ну и далее уже работать с числами: найти произведение элементов главной диагонали и т.д....
я даже и понятия не имею какая из двух диагоналей в прямоугольнике главнее

  Ответить  
 
 автор: heed   (29.11.2009 в 17:56)
 
   для: afing   (29.11.2009 в 14:44)
 

даже проверил в Visual C++ Toolkit 2003 Command Promt
C:\_PROJECTS\vs\9>cd c:\_PROJECTS\vs\9

C:\_PROJECTS\vs\9>cl 1.cpp
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.3052 for 80x86
Copyright (C) Microsoft Corporation 1984-2002. All rights reserved.

1.cpp
Microsoft (R) Incremental Linker Version 7.10.3052
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:1.exe
1.obj

C:\_PROJECTS\vs\9>link 1.obj
Microsoft (R) Incremental Linker Version 7.10.3052
Copyright (C) Microsoft Corporation.  All rights reserved.

C:\_PROJECTS\vs\9>1.exe
        1       72      3       4       -5
        3       5       9       767     3
        5       -77     9       0       2
        -7      667     4       71      3
        0       7       345     3       0

  Ответить  
 
 автор: afing   (29.11.2009 в 23:03)   письмо автору
 
   для: heed   (29.11.2009 в 17:56)
 

ну я в Visual C++ 6.0 работаю как консольное приложение...)
можт в этом проблема... с компиляцией??(

  Ответить  
 
 автор: heed   (30.11.2009 в 13:06)
 
   для: afing   (29.11.2009 в 23:03)
 

привели-бы сообщение об ошибке

судя по #include "stdafx.h" в п1
Вы создавали не пустой проект

Выбор "Консольное приложение" определяет только будет-ли добавлено /D "_CONSOLE" к параметрам для линкера, и как следствие будет-ли ожидаться main()
или WinMain() , если было /D "_WINDOWS"

Просто создайте новый пустой консольный проект , а потом вручную создайте или откройте с/cpp файл

  Ответить  
 
 автор: afing   (30.11.2009 в 14:48)   письмо автору
62.4 Кб
 
   для: heed   (30.11.2009 в 13:06)
 

вот такая ошибка вылазит(

  Ответить  
 
 автор: heed   (30.11.2009 в 17:26)
 
   для: afing   (30.11.2009 в 14:48)
 

что-то не смог получить у себя такую ошибку

я-бы просто попробовал чего получится если в строке меню
"Build"->"Set Active Configuration.."
Выбрать Release вместо Debug

Но у меня работает и при Debug, а с помощью fgetc() можно тоже сделать
, только это заметно больше кода получится

fscanf вроде самая стандартная , если поставить галочку в свойствах проекта там где
Линкер Кустомайзе "print process message"
, то
 
...................
   Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\LIBCD.lib:
      Found _printf
        Referenced in x.obj
        Loaded LIBCD.lib(printf.obj)
      Found _fclose
        Referenced in x.obj
        Loaded LIBCD.lib(fclose.obj)
      Found _fscanf
        Referenced in x.obj
        Loaded LIBCD.lib(fscanf.obj)
.........

то видно что она просто берётся из LIBCD.lib, а fscanf.c он вроде даже и не компилируется, он уже лежит в этой LIBCD.lib вместе с _assert()
, если Releas всё тоже самое но с LIBC.lib

  Ответить  
 
 автор: afing   (30.11.2009 в 19:31)   письмо автору
 
   для: heed   (30.11.2009 в 17:26)
 

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

  Ответить  
 
 автор: heed   (01.12.2009 в 00:10)
 
   для: afing   (30.11.2009 в 19:31)
 

зато у меня отладчик так не работает :)
А что скажет например на sscanf() ?
#include "stdio.h"
#include "windows.h"
typedef unsigned int uint;

int ShowErrorMessagechar*);

int ShowErrorMessagechar txt[] ) { // GetLastError()
 char* lpBuffer;
 char* szBuf = (char*) LocalAlloc(LPTR, 100); //выделение памяти
 int err  = GetLastError();
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |FORMAT_MESSAGE_FROM_SYSTEM
,0, err, LANG_NEUTRAL, (LPTSTR)&lpBuffer,1024,0);
wsprintf(szBuf,
        "код:%#08lx  %s", err, txt); 
err = MessageBox(0, lpBuffer, szBuf
, MB_ICONERROR |MB_RETRYCANCEL |MB_DEFBUTTON2);

LocalFree(lpBuffer); //освобождение памяти
LocalFree(szBuf); //освобождение памяти
 return err;
}

/////////// main ///////////////

int main(void)
{
int a[5][5], i, j;
FILE * fp;
char buff[1024];

OPEN_FILE:
 fp=fopen("d:\\_zzz.txt""rb"); //полный путь к файлу

 i=0;
while( !feof(fp) )
    {
        iffgets( buff, 1023, fp ) == NULL )
            break;
     sscanf(buff, "%d %d %d %d %d "
   , &a[i][0], &a[i][1], &a[i][2], &a[i][3], &a[i][4]);
   i++;
    }

 ShowErrorMessage("проверка");

 fclose(fp);

 for(i=0; i<5; i++) {
  for(j=0; j<5; j++) {
   printf("\t%d", a[i][j]);
  }
  printf("\n");
 }

 if ( ShowErrorMessage("повторить") == IDRETRY) goto OPEN_FILE;
return 0;
}

  Ответить  
 
 автор: afing   (01.12.2009 в 17:36)   письмо автору
 
   для: heed   (01.12.2009 в 00:10)
 

тот же отчет об ошибке, та же лажа...=)
вобщем с компилятором походу какая то беда...
ну все равно СПАСИБО ОГРОМНОЕ за помощь!!!)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования