Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
АТерентьев
21 / 20 / 1
Регистрация: 16.10.2009
Сообщений: 947
#1

Ввод матрицы из файла - затирает последний элемент предыдущей строки - C++

21.03.2010, 00:25. Просмотров 947. Ответов 3
Метки нет (Все метки)

Странный эффект
Содержимое вводимого файла-
1 2 3
4 5 6

C++
1
2
3
4
5
6
int *a;
a = new(2*3);
 
for (i=0;i<2;i++)
  for (j=0;j<3;j++)
    fscanf(input, "%d %d",*(a+i*2+j));
При выводе введенного массива в стандартный вывод - получаем
1 2 4
4 5 6

Если вывод вводимых символов поставить сразу во внутреннем цикле , то вроде все вводится
нормально
1 2 3
4 5 6
Такое впечатление , что когда происходит переход на ввод второй строки - затирается последний символ первой строки.
Как бы это поправить?

Добавлено через 56 минут
Прошу прощения в тексте описки сделал
C++
1
2
3
4
5
6
int *a;
a = new int(2*3);
 
for (i=0;i<2;i++)
  for (j=0;j<3;j++)
    fscanf(input, "%d",*(a+i*3+j));
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.03.2010, 00:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ввод матрицы из файла - затирает последний элемент предыдущей строки (C++):

Найти последний элемент каждой строки матрицы, который не является степенью заданного числа - C++
Написать программу, которая 7. для каждой строки массива определяет последний элемент, который не является степенью числа 3 (например,...

Для каждой строки матрицы найти последний четный элемент и записать данные в новый массив - C++
Дан массив размером n*n , элементы которого целые числа . Для каждой строки найти последний четный элемент и записать данные в новый массив

Строки. Как найти в слове первый элемент? Второй элемент, последний элемент? - C++
как найти в слове первый элемент?Второй элемент,последний элемент.С помощью каких операторов это делается??

Последний элемент из файла выводится 2 раза - C++
Добрый вечер. Подскажите, пожалуйста, почему при чтении из файла последний элемент выводиться 2 раза? Если в файле такие данные: &quot;string1...

Найти первый и последний положительный элемент в строках матрицы - C++
Организовать двухмерный массив с вещественными числами и найти первый и последний положительный элемент в строках массива.

умножить элемент каждой строки первой матрицы на наибольшее из значений элементов соответствующей строки второй матрицы - C++
Даны две действительные квадратные матрици порядка n. Получить новую матрицу: умножением элементов каждой строки первой матрици на...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
klaxor
0 / 0 / 1
Регистрация: 21.11.2009
Сообщений: 25
21.03.2010, 00:34 #2
Неточно но я думаю тут проблема с \0 (нулевым байтом) надо как то показать компилятору что конец строки.Скорей всего еще на шаг сделать вперед и прочитать этот ноль и только после него выводить следующую строку
0
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,460
21.03.2010, 01:57 #3
В функции fscanf третий параметр есть АДРЕС переменой. ДЛя начала эо исправь. Надо так:

C++
1
fscanf(input, "%d",a+i*3+j)
1
АТерентьев
21 / 20 / 1
Регистрация: 16.10.2009
Сообщений: 947
21.03.2010, 11:18  [ТС] #4
* и не было, что-то на ночь глядя описок наделал. Проблема в том, что под windows ( я использую devC++) все работает. А под Linux начинаются фокусы - полный текст рабочей (под windows) программы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    int i,j;  
    int row=2;
    int col=3;
    int *a;
    FILE *input = stdin; 
 
 
    input=fopen("123456.txt","r");
 
    a = new int(row*col);
     
     for (i=0;i<row;i++)
      {
        for (j=0;j<col;j++)
         { read = fscanf(input,"%d",a+i*col+j);
           printf("%d ",*(a+col*i+j));  // Çäåñü Г¬Г*Г±Г±ГЁГў âûâîäèòñÿ ГЇГ°Г*âèëüГ*Г® - 1 2 3
         }                              //                                    4 5 6
         printf("\n");
      }
    fclose(input);
    
    printf("Repeated - \n");
    
     for (i=0;i<row;i++)
      {   for (j=0;j<col;j++)
             printf("%d ",*(a+col*i+j));  // ГЂ çäåñü ïîä windows ГЇГ°Г*âèëüГ*Г® Г* ïîä linux
           printf("\n");                  //                    1 2 4
                                          //                    4 5 6
      }
      
    
    fscanf (stdin,"%d",&i);
        
}
        
}
Что бы это значило?
Спасибо!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2010, 11:18
Привет! Вот еще темы с ответами:

Отрицательные элементы умножить на последний элемент соответствующей строки. - C++
Отрицательные элементы умножить на последний элемент соответствующей строки. Массив m, заполненный генератором случайных чисел в диапазоне...

При считывании из файла последний элемент читается дважды - C++
Всем доброго времени суток! Нашёл граблю. Считываю из файла слова, разделённые пробелами, в vector&lt;string&gt;. Для куска кода, которые...

Первый отрицательный и последний положительный элемент читаемый из файла - C++
Из файла (имя файла вводится с клавиатуры) считывается массив целых чисел. Размер массива заранее неизвестен. Выведите в файл количество...

При чтении файла последний элемент повторяется дважды - C++
появилась необходимость выучить работу с файлами за 9 часов #include &lt;iostream&gt; #include &lt;time.h&gt; #include &lt;stdio.h&gt; #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
21.03.2010, 11:18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru