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

ошибка преобразования char - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Составить таблицу функций на отрезках http://www.cyberforum.ru/cpp-beginners/thread201112.html
Даны действительные значения a, b, h. Значение х меняется на отрезке с шагом h. Составить таблицу значений функций y= tg (x) - ( 5 - x ), z1=y2(x), z2=abs(y) на отрезке .
C++ Программа на MPI модуле Здравствуйте! Дана такая задачка следующего вида: q = max(3*MA+5*MB) где MA, MB – матриці размером NxM. Числа N та M задаются пользователем . Все элемент матрицы заполнить целыми числа в диапазоне... http://www.cyberforum.ru/cpp-beginners/thread201111.html
Введение произвольного количества элементов массива C++
Собственно, как это реализовать? Кто не понял, пример: вводим элементы массива до тех пор, пока не будет набрано число 666, или слово stop, или ещё что-то. Извиняюсь за идиотский вопрос, скорее всего...
матрицы C++
Доброй ночи, помогите пожалуйста упростить\оптимизировать\изменить(в лучшую сторону) код следующей программы: #include <iostream> #include <ctime> #include <cmath> using std::cout; using...
C++ Преобразование типов http://www.cyberforum.ru/cpp-beginners/thread201083.html
есть следующая маленькая программка #include <iostream> #include <conio.h> using namespace std; int main() { int oldFunt, oldShilling, oldPenc; //устаревшиая денежная система cout...
C++ оператор цикла WHILE задание: написать програму при помощи оператора цикла WHILE для подсчета суммы ряда с точность Е=10-4 общий член которого a(c индексом n)=n!/n^n попробовал сделать вот так но препод сказал что не... подробнее

Показать сообщение отдельно
accept
4823 / 3244 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
05.12.2010, 09:48
не должно быть различий в размерах массивов, либо везде 80, либо везде 81

C
1
2
3
4
if(fgets(in,81,out1)==NULL)
     {break;};
      in[80]='\0';
      strncpy(a[kolstrA],in,80);};
в a[] все строки имеют длину 80, in же имеет длину 81, это значит, что в a[][] можно записать только 79 символов и последний должен быть нуль-символ, а в in можно записать 80 символов и последний должен быть нуль-символ
в результате получается перекос, если в in попадёт 80 нормальных символов, то 81 делается нуль-символом in[80]='\0'; - это 81й символ

прикинь, в строку, где может быть 79 символов, копируется 80 символов, 80й попадает на место нуль-символа, это значит, что функцию сравнения нельзя применять к такой строке, потому что функция сравнения strcmp() для обеих строк концы определяет по нуль-символам в них

это значит, что при сравнении, если она дойдёт до конца массива, она выйдет за его пределы и будет дальше сравнивать, пока за его пределами не встретит байт со значением равным нулю

поэтому везде либо 80, либо 81, но не по-разному

C
1
for(i=0;i<=kolstrA;i++)
неправильно, нету там столько элементов

C
1
for(i = 0; i < kolstrA; i++)
если kolstrA == 100, то тело цикла выполнится сто раз

из этого же цикла pa[i], представь, если i == 100, это будет обращение к 101му элементу, в то время как char*pa[100]; содержит только сто элементов

C++
1
2
    for (i = 0; i < kolstrA - 1; i++)
        for (j = i + 1; j < kolstrA; j++)
такая сортировка работает неправильно, потому что у тебя логическая ошибка там
ты когда, например, прочитала три строки из файла, у тебя kolstrA равно не три, а два
а зачем тебе два, если у тебя три ?
поэтому тебе нужно либо fgets() перенести в условие цикла из тела, либо при выходе из цикла, когда файл закончился, наращивать kolstrA
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru