Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.89/316: Рейтинг темы: голосов - 316, средняя оценка - 4.89
zss
Модератор
Эксперт С++
8596 / 7554 / 4675
Регистрация: 18.12.2011
Сообщений: 20,009
Завершенные тесты: 1
1

Распространенные ошибки

02.10.2014, 12:49. Просмотров 58539. Ответов 63
Метки нет (Все метки)

Оглавление

Ошибки этапа компиляции
(В процессе компиляции выдается либо сообщение об ошибке, либо предупреждение)
- Попытка модифицировать константу через указатель
- Лишняя точка с запятой
- Отсутствие возврата значения из функции
- Приведение типа в стиле С++
- Использование = вместо ==


Ошибки этапа исполнения программы
(Во время исполнения программа прерывается с сообщением об ошибке)
- Возврат из функции локальной строки
- Выделение памяти без дальнейшего освобождения
- Использование неинциализированной переменной
- Использование функции strncpy как функции "безопасного" копирования строк
- Использование функций atoi/atof или sscanf для перевода строки в число
- Возврат ссылки/указателя на локальную переменную
- Выход за пределы массива
- Сравнение символьных массивов
- Использование чисел, записанных в других системах счисления.
- Работа с локальной копией объекта, вместо работы с самим объектом


Неправильное поведение программы на этапе исполнения
(Программа работает, но не так, как запланировано)
- Использование типов char, short и float при работе с va_arg
- Определение размера массива, переданного в качестве аргумента функции.
- "Неожиданное" закрытие окна.
- "Неожиданное" целочисленное деление в арифметических выражениях.
- Ошибки в логических выражениях.
- Использование символа цифры вместо числа
- Лишняя точка с запятой
- switch без break
- Сравнение вещественных чисел при вычислениях
- Проверки на принадлежность значения определенному интервалу.
- Неверный аргумент тригонометрических функций.
- Сравнение знаковой переменной с беззнаковой.
- Использование запятой для отделения дробной части
- Забытое выделение тела цикла for, while и операторов if else
- Локальная переменная экранирует переменную с таким же именем из вышестоящей области видимости
- Неправильное использование memset
- Сравнение char массивов

Алгоритмические ошибки
(Неправильно составлен алгоритм программы)
- Двойная перестановка строк или элементов массива.

Ошибки ввода-вывода
- Ошибки при использовании функции scanf()!
- При работе с fgetc под Windows чтение файла обрывается при достижении буквы 'я'
- Оставление символа '\n' в потоке ввода
- scanf() - ввод текстовых строк

Ошибки, связанные с отклонением от стандарта языка
- Неверный тип функции main()
3
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.10.2014, 12:49
Ответы с готовыми решениями:

Ошибки при компиляции - исправить ошибки в коде
Помогите исправить ошибки , не понимаю в чем может быть причина ... #include <conio.h>...

Распространенные ошибки
Оглавление Ошибки этапа компиляции Программа не компилируется или компилируется с...

безопасность и распространенные ошибки
Тут наткнулся на очень интересные тексты: http://werad.narod.ru/articles/programm6.html ...

Распространенные ошибки SEO и ASP.NET 2.0
Здравствуйте, существуют несколько СЕО проблем при использовании ASP.NET, ниже я опишу эти...

Самые распространенные строки
type Mytype = record name:string; surname:string; end; var Students:Mytype; ...

63
number_118
6 / 6 / 1
Регистрация: 28.09.2018
Сообщений: 390
24.02.2019, 21:25 61
TheCalligrapher,

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
12. scanf() - ввод текстовых строк
Сообщение от zss
C++Выделить код
1
2
3
char mass[N];
scanf("%s",mass); // так правильно
scanf("%s",&mass); // почему-то тоже срабатывает
А в чем проблема?
Возможно, кому-то понравится:

https://www.geeksforgeeks.org/whats-...or-int-array5/
0
number_118
6 / 6 / 1
Регистрация: 28.09.2018
Сообщений: 390
11.03.2019, 06:09 62
К слову о генерации случайных чисел, вот такой код:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
 
 
int main (void) {
    
    int a, sum = 0, tmp; char str[50];
    srand(time(NULL));
    
    a = rand()%( 32760 - 100 ) + 100;
    
        do  {
            printf("%d ", a /= 10);
        } while ( a / 10 );
    
    
    getch();
    return 0;
        
    
}
даёт выходные данные:

Код
2478 247 24 2
Код
2501 250 25 2
-- хах, вроде исправилось)

но если компилировать + запускать ( как я привык делать; клавишу, знаете ли запомнил ),

не выходя из IDE, то

Код
2514
Код
2516
Код
2518
Хотя я понял: оно же берёт системное время --> скорее всего, связано с тем, что я некоторое время возился тут, набирая что-то.

Всё это я к тому, что алгоритм не самый хороший. Возможно, надо делать, как stake-k26, деля на два, но непонятно, что и почему это даёт.

Спасибо.
0
Evg
Эксперт CАвтор FAQ
20419 / 7939 / 615
Регистрация: 30.03.2009
Сообщений: 22,101
Записей в блоге: 30
10.09.2019, 21:38 63
В продолжение Вычитание беззнаковых чисел и Ошибка переполнения малоразрядных беззнаковых переменных

C
#include <stdio.h>
 
int main (void)
{
  unsigned char a, b, c;
  a = 0;
  b = 254;
 
  /* Пример N1 */
  if ((a - b) > 5u)
    printf ("1: yes\n");
  else
    printf ("1: no\n");
 
  /* Пример N2 */
  c = a - b;
  if (c > 5u)
    printf ("2: yes\n");
  else
    printf ("2: no\n");
 
  return 0;
}
Код
$ gcc t.c

$ ./a.out
1: yes
2: no
С виду оба примера выглядят одинаково. Разница между ними только в том, что в примере N2 результат вычитания записывается в промежуточную переменную. Однако работают они по разному

Виною всему integer promotion. По правилам языка Си при построении арифметических операций для аргументов короткого целочисленного типа (char, unsigned char, short, unsigned short) выполняется неявное преобразование к типу int. В итоге пример N1 выглядит как

C
  if ( (unsigned)((int)a - (int)b) > 5u )
а пример N2, если выкинуть из него промежуточную переменную "c", добавив при этом truncation (операцию приведения к unsigned char, как это имеет место быть при записи в переменную "c"), выглядит как

C
  if ( (unsigned)(unsigned char)((int)a - (int)b) > 5u )
отличие между ними в том, что в примере N2 появляется дополнительный truncate до usigned char'а. Значение выражения "(int)a - (int)b" в обоих случаях будет равно -254 (0xffffff02). В первом случае при беззнаковом сравнении это число окажется больше, чем 5. В вот дополнительный truncate во втором случае приведёт к тому, что это значение станет равным 0x02, и уже окажется меньше, чем 5
2
Arhat109
46 / 10 / 0
Регистрация: 18.06.2018
Сообщений: 93
12.09.2019, 08:51 64
Evg, спс. Я "так" ни умею .. но именно так и надо для начинающих.
0
12.09.2019, 08:51
12.09.2019, 08:51
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2019, 08:51

Вывести самые распространенные мужские и женские имена
Имеется массив записей о студентах, каждая из которых включает поля: фамилия, имя, отчество, пол,...

Вывести самые распространенные женские и мужские имена
Помогите решить задачу пожалуйста! Написать программу, которая формирует файл записей данной...

Вирус блокирует выход на сайт вк и другие распространенные сайты
я чайник поэтому если что то не загрузилось..напишите пожалуйста, и помогите... второй день вожусь...


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

Или воспользуйтесь поиском по форуму:
64
Ответ Создать тему
Опции темы

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