Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
viral
2 / 2 / 0
Регистрация: 02.05.2017
Сообщений: 85
1

Некорректно работает программа на С

12.10.2017, 09:29. Просмотров 738. Ответов 8
Метки нет (Все метки)

Все примеры из учебника используют переменные типа int но мне приходится использовать переменные типа double поскольку иначе получается белеберда показанная на скриншоте. Подскажите как это исправить?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <windows.h>
#include <locale.h>
void main(void)
{
    setlocale(LC_CTYPE, "Russian");
int n, Sum = 0, i;
printf("Введи n\n");
scanf("%d", &n);
for (i = 0;; i++)
{
    Sum += i;
    printf("Sum = %d\n", &n);
        if (Sum > n)
            break;
}
    system("pause");
}
0
Миниатюры
Некорректно работает программа на С  
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2017, 09:29
Ответы с готовыми решениями:

Некорректно работает программа на С/С++
Программа написанная на С++ должна вычислять факториал числа а в итоге не делает ничего кроме как...

Некорректно работает программа на С/С++
Запускается программа вот её код #define _CRT_SECURE_NO_WARNINGS #include &lt;windows.h&gt; #include...

Программа, удаляющая повторяющиеся пробелы и табуляции (работает некорректно)
Прошу помощи и детального ( по возможности разбора полетов ) Программа выводит строки где больше...

Определить, сколько времени студент решал задачи (программа работает некорректно)
Данная программа дожна считать минуту и часы. Начиная от заданых минут и часов и заканчивая...

Некорректно работает if
Здравствуйте. У меня проблема. Если я указываю такое условие: if ( (i != k) &amp;&amp; (j != l) ) то if...

8
COKPOWEHEU
1345 / 975 / 222
Регистрация: 09.09.2017
Сообщений: 4,046
12.10.2017, 10:02 2
$ gcc main.c -Wall
main.c:4:6: warning: return type of ‘main’ is not ‘int’ [-Wmain]
void main(void)
^~~~
main.c: In function ‘main’:
main.c:12:20: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘int *’ [-Wformat=]
printf("Sum = %d\n", &n);

Перед компиляцией поубирал всякий мусор вроде #include <windows.h>, system("pause");
Так вот, компилятор пытается подсказать что printf принимает параметры по значению а не по ссылке. То есть нужно написать printf("%d\n", n); Непонятно, правда, зачем в цикле выводить одно и то же число, которое в программе не меняется.
Кроме того, main() возвращает целочисленное значение, а не void: int main(int argc, char *argv[]) и только так
0
viral
2 / 2 / 0
Регистрация: 02.05.2017
Сообщений: 85
12.10.2017, 10:15  [ТС] 3
COKPOWEHEU, Ничего не понял
Как мне тогда сделать так чтобы программа не сворачивалась если не по средством <windows.h>?
Как мне вводить значение через printf("%d\n",n), если для этого нужен scanf?
И вроде как Sum+=i не должен выводить одно и тоже значение в этом вся суть он приплюсовывает к значению Sum значение i которое в цикле увеличивается.
0
COKPOWEHEU
1345 / 975 / 222
Регистрация: 09.09.2017
Сообщений: 4,046
12.10.2017, 10:44 4
Так программа сама по себе и не сворачивается. Вы ее не из консоли что ли запускаете?
printf нужен для вывода он принимает переменные по значению, scanf - для ввода, он принимает по указателю
Значение Sum+=i меняется, но выводите-то вы не Sum а n.
0
12.10.2017, 10:44
viral
2 / 2 / 0
Регистрация: 02.05.2017
Сообщений: 85
12.10.2017, 10:58  [ТС] 5
[COKPOWEHEU,
Я отключил <windows.h> запустил программу нажав F5 и она свернулась... Это пустой проект на С++ в visual studio
Да с переменной Sum накосячил исправил только значение не изменилось. Может у себя запустите на visual studio? Просто я правду говорю)
Программа теперь выглядит вот так она запустилась но результат тот же с повторяющимися значениями будто буфер переполнен в переменной
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <windows.h>
#include <locale.h>
int main(int argc, char *argv[])
//void main(void)
{
    setlocale(LC_CTYPE, "Russian");
int n, Sum = 0, i;
printf("Введи n\n");
scanf_s("%d", &n);
for (i = 0;; i++)
{
    Sum += i;
    printf("Sum = %d\n", &Sum);
        if (Sum > n)
            break;
}
    system("pause");
}
0
Миниатюры
Некорректно работает программа на С  
COKPOWEHEU
1345 / 975 / 222
Регистрация: 09.09.2017
Сообщений: 4,046
12.10.2017, 11:18 6
Лучший ответ Сообщение было отмечено viral как решение

Решение

Цитата Сообщение от viral Посмотреть сообщение
Может у себя запустите на visual studio?
Где ж я его возьму?! А главное - зачем?
Собственно, я уже проверял ваш код, еще во 2-м посте.
Цитата Сообщение от viral Посмотреть сообщение
printf("Sum = %d\n", &Sum);
По значению передавайте а не по указателю!
printf("Sum = %d\n", Sum); без амперсанда
C
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
int main(int argc, char *argv[]){
  int n, sum = 0, i;
  printf("Input n >");
  scanf("%d", &n);
  for (i = 0; sum<=n; i++){
    sum += i;
    printf("Sum = %d\n", sum);
  }
  return 0;
}
Компилирую $ gcc main.c -Wall -lm
Запускаю
$ ./a.out
Input n >3
Sum = 0
Sum = 1
Sum = 3
Sum = 6
1
viral
2 / 2 / 0
Регистрация: 02.05.2017
Сообщений: 85
12.10.2017, 11:22  [ТС] 7
COKPOWEHEU, Ого & это указатель каждый день узнаю что то новое. Спасибо помогло.
0
COKPOWEHEU
1345 / 975 / 222
Регистрация: 09.09.2017
Сообщений: 4,046
12.10.2017, 12:13 8
Цитата Сообщение от viral Посмотреть сообщение
Ого & это указатель
Не совсем так. Это ссылка - константный указатель.
Полноценный указатель объявляется и используется через звездочку
C
1
2
3
4
int x; //объявление переменной
int *y;//объявление указателя
y = &x; //присвоение указателю ссылки на х, то есть ее адреса.
*y = 1; //запись туда, куда указывает у, числа 1. Поскольку у указывает на х, значение х тоже изменится
Впрочем, на счет терминологии не уверен, не всем нравится когда &x называют ссылкой.
0
Michail97
93 / 40 / 23
Регистрация: 18.09.2016
Сообщений: 372
12.10.2017, 12:15 9
Цитата Сообщение от viral Посмотреть сообщение
Ого & это указатель
Нет это амперсанд, позволяющий получить адрес, по которому располагается значение.
Переменная - указатель - это, к примеру int *ptr;
Значение указателя - адрес.
Поэтому ptr = &val;
ptr стало указывать на адрес, перменной val.
С помощью операции разыменования можно изменить значение переменной val
Например если val был равен 5, после инициализации указателя адресом перменной val, с помощью операции разыменования *ptr = 4, вы изменили значение, хранящаяся по адресу, куда указываеть ptr. А так ptr имеет значение &val, то изменится и само значение переменной val, то есть val = 4
0
12.10.2017, 12:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2017, 12:15

Программа выполняется некорректно
Есть проблема если я беру &quot;с=0&quot; и в цикле пишу условие &quot;с!=100&quot;, то у меня нормально отображается...

Стек работает некорректно
Почему он не прорабатывает до конца? #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; struct node { ...

Некорректно работает прогрмма
Программа выдает с a2 по a4 нули, хотя там должны быть значения отличные от нуля. Помогите...


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

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

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