Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/40: Рейтинг темы: голосов - 40, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 17.10.2013
Сообщений: 17

Не могу разобраться с printf и scanf

29.09.2016, 19:57. Показов 8843. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написал программу:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
 
int main(int argc, char ** argv)
{
    long n;
    scanf("%l", &n);
    long x, a[n], i;
    scanf("%l", &x);
    for (i=n; i>=0; i++) scanf("%l", &a[i]);
    long p1, p2;
    p1=a[n];
    for (i=n; i>0; i++) p1=p1*x+a[i-1];
    printf("%l", p1);
    return 0;
}
А в компиляторе выводит ошибки:
Кликните здесь для просмотра всего текста
polynom.c: In function 'main':
polynom.c:6:8: warning: conversion lacks type at end of format [-Wformat=]
scanf("%l", &n);
^
polynom.c:6:8: warning: too many arguments for format [-Wformat-extra-args]
polynom.c:8:8: warning: conversion lacks type at end of format [-Wformat=]
scanf("%l", &x);
^
polynom.c:8:8: warning: too many arguments for format [-Wformat-extra-args]
polynom.c:9:29: warning: conversion lacks type at end of format [-Wformat=]
for (i=n; i>=0; i++) scanf("%l", &a[i]);
^
polynom.c:9:29: warning: too many arguments for format [-Wformat-extra-args]
polynom.c:13:9: warning: conversion lacks type at end of format [-Wformat=]
printf("%l", p1);
^
polynom.c:13:9: warning: too many arguments for format [-Wformat-extra-args]
polynom.c:10:11: warning: unused variable 'p2' [-Wunused-variable]
long p1, p2;
^
polynom.c:3:14: warning: unused parameter 'argc' [-Wunused-parameter]
int main(int argc, char ** argv)
^
polynom.c:3:28: warning: unused parameter 'argv' [-Wunused-parameter]
int main(int argc, char ** argv)
^
Что делать? Я так понял, накосячил с prinf и scanf, но в чем именно? Вроде же все переменные формата long, и в printf и scanf поставил %l.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.09.2016, 19:57
Ответы с готовыми решениями:

Не могу переделать код (использование printf и scanf вместо cout и cin)
Нужно сделать лабораторную работу по C, но у меня вообще ничего не получается с printf и scanf, плюс разбить на отдельные функции(ввод...

Scanf and printf
Проблема состоит в том, что ввожу одно, а выводит другое. #include &lt;stdio.h&gt; struct Sportsman { int place; }; int...

Printf-scanf
Добрый день, можете привести пример простого кода – вида - вопрос-ответ? чередование связки printf и scanf (примерно...

31
67 / 65 / 61
Регистрация: 11.11.2015
Сообщений: 395
30.09.2016, 20:54
Студворк — интернет-сервис помощи студентам
вместо mod - %
1
0 / 0 / 0
Регистрация: 17.10.2013
Сообщений: 17
01.10.2016, 00:17  [ТС]
Цитата Сообщение от lonelyhunter Посмотреть сообщение
вместо mod - %
Спасибо. Еще вопрос: почему в этом фрагменте программа неправильно определяет старший значащий бит?
C
1
2
3
4
5
6
7
8
unsigned long n, i, b;
    n=66;
    i=65;
    while(i!=n) {
        printf("%lu %lu %lu\n", ((b>>i)&1), i, n);
        if((b>>i)&1) n=i;
        else i--;
    }
Например, при вводе 8 программа показывает 35, а при вводе 1 - 64.
0
81 / 81 / 33
Регистрация: 03.03.2013
Сообщений: 311
01.10.2016, 01:39
VladMv500, а что такое mod?
0
0 / 0 / 0
Регистрация: 17.10.2013
Сообщений: 17
01.10.2016, 01:44  [ТС]
Цитата Сообщение от Novi4ekC Посмотреть сообщение
VladMv500, а что такое mod?
Остаток от деления, мне уже сказали, что правильно %:
Цитата Сообщение от lonelyhunter Посмотреть сообщение
вместо mod - %
0
81 / 81 / 33
Регистрация: 03.03.2013
Сообщений: 311
01.10.2016, 02:06
VladMv500, вот это - логическая операция:
C
1
(b>>i)
а вот это - полный бред:
C
1
2
3
4
5
    while(i!=n) {
        printf("%lu %lu %lu\n", ((b>>i)&1), i, n);
        if((b>>i)&1) n=i;
        else i--;
    }
что бы найти старший значащий бит, нужно хотя бы знать его местоположение. Он может быть седьмым, пятнадцатым, тридцать первым и т.д. старший значащий бит не обязательно должен быть '1'

Добавлено через 15 минут
VladMv500,
C
1
2
3
4
5
6
7
8
9
10
11
#include    <stdio.h>
 
#define type    short
 
main()
{
type    n;
scanf("%d", &n);
printf("\nThe most signed bit is %u", (bool)(n >> (sizeof(type)*8 - 1)) );
return 0;
}
1
67 / 65 / 61
Регистрация: 11.11.2015
Сообщений: 395
01.10.2016, 13:34
В сях же вроде нету bool?
0
0 / 0 / 0
Регистрация: 17.10.2013
Сообщений: 17
01.10.2016, 23:18  [ТС]
Цитата Сообщение от Novi4ekC Посмотреть сообщение
что бы найти старший значащий бит, нужно хотя бы знать его местоположение. Он может быть седьмым, пятнадцатым, тридцать первым и т.д. старший значащий бит не обязательно должен быть '1'
Нужно найти старшую единицу, не зная местоположения.
Цитата Сообщение от lonelyhunter Посмотреть сообщение
В сях же вроде нету bool?
C
1
2
3
4
5
    while(i!=n) {
        printf("%lu %lu %lu\n", ((b>>i)&1), i, n);
        if((b>>i)&1) n=i;
        else i--;
    }
Почему это не подходит?
P.S. Проблему понял, но не понял, как исправить: при попытке сдвигать больше, чем на 31 бит, он начинает просматривать не с 32-го бита, а с 0-го, то есть сначала. Чего не должно быть, т.к. в Unsigned long не 4, а 8 байт.
0
81 / 81 / 33
Регистрация: 03.03.2013
Сообщений: 311
02.10.2016, 00:37
Цитата Сообщение от lonelyhunter Посмотреть сообщение
В сях же вроде нету bool?
в си даж такой тип данных как bit может быть, сам в шоке.
Цитата Сообщение от VladMv500 Посмотреть сообщение
P.S. Проблему понял, но не понял, как исправить: при попытке сдвигать больше, чем на 31 бит, он начинает просматривать не с 32-го бита, а с 0-го, то есть сначала. Чего не должно быть, т.к. в Unsigned long не 4, а 8 байт.
Ну, во-первых: в 8-ми байтах 64 бита, а не 66. А во-вторых: система команд х86 32-разрядная.
0
153 / 148 / 66
Регистрация: 20.02.2014
Сообщений: 556
02.10.2016, 00:48
Цитата Сообщение от Novi4ekC Посмотреть сообщение
вот это - логическая операция: (b>>i)
Это не логическая операция, а операция битового сдвига.

Цитата Сообщение от lonelyhunter Посмотреть сообщение
В сях же вроде нету bool?
Есть. В С99 подвезли тип _Bool, и макрос для него bool, при подключении хедера <stdbool.h>

Цитата Сообщение от Novi4ekC Посмотреть сообщение
в си даж такой тип данных как bit может быть
Что за бред?
2
0 / 0 / 0
Регистрация: 17.10.2013
Сообщений: 17
02.10.2016, 12:43  [ТС]
Цитата Сообщение от Novi4ekC Посмотреть сообщение
Ну, во-первых: в 8-ми байтах 64 бита, а не 66. А во-вторых: система команд х86 32-разрядная.
Я знаю, что в 8-ми байтах 64 бита) И как тогда обращаться к битам большим, чем 31?
Цитата Сообщение от Вованя Посмотреть сообщение
Есть. В С99 подвезли тип _Bool, и макрос для него bool, при подключении хедера <stdbool.h>
Мне можно использовать только <stdio.h>

Добавлено через 41 минуту
Что делать, если компилятор выдает следующее: warning: format '%lu' expects argument of type 'long unsigned int *', but argument 2 has type 'long unsigned int' ?

Добавлено через 1 час 5 минут
Цитата Сообщение от VladMv500 Посмотреть сообщение
Что делать, если компилятор выдает следующее: warning: format '%lu' expects argument of type 'long unsigned int *', but argument 2 has type 'long unsigned int' ?
Все, с этим разобрался
0
81 / 81 / 33
Регистрация: 03.03.2013
Сообщений: 311
02.10.2016, 13:53
Цитата Сообщение от VladMv500 Посмотреть сообщение
Я знаю, что в 8-ми байтах 64 бита) И как тогда обращаться к битам большим, чем 31?
Пардон, моя ошибка: есть сдвиг больше чем на 32 бита _x86_instructions, нужно просто создать переменную типа Long long int

Добавлено через 4 минуты
VladMv500, И вопрос по программе, что она должна делать?
0
0 / 0 / 0
Регистрация: 17.10.2013
Сообщений: 17
02.10.2016, 18:12  [ТС]
Пробовал с unsigned long long (long long int тоже пробовал), но ругается на строки с "%llu" ("%lld").
Кликните здесь для просмотра всего текста
mulmod.c: In function 'main':
mulmod.c:6:8: warning: unknown conversion type character 'l' in format [-Wformat=]
scanf("%lld %lld %lld", &a, &b, &m);
^
mulmod.c:6:8: warning: unknown conversion type character 'l' in format [-Wformat=]
mulmod.c:6:8: warning: unknown conversion type character 'l' in format [-Wformat=]
mulmod.c:6:8: warning: too many arguments for format [-Wformat-extra-args]
mulmod.c:11:16: warning: unknown conversion type character 'l' in format [-Wformat=]
printf("%lld %lld %lld\n", ((b>>i)&1), i, n);
^
mulmod.c:11:16: warning: unknown conversion type character 'l' in format [-Wformat=]
mulmod.c:11:16: warning: unknown conversion type character 'l' in format [-Wformat=]
mulmod.c:11:16: warning: too many arguments for format [-Wformat-extra-args]
mulmod.c:15:9: warning: unknown conversion type character 'l' in format [-Wformat=]
printf("%lld\n", n);
^
mulmod.c:15:9: warning: too many arguments for format [-Wformat-extra-args]
mulmod.c:19:9: warning: unknown conversion type character 'l' in format [-Wformat=]
printf("%lld\n", r);
^
mulmod.c:19:9: warning: too many arguments for format [-Wformat-extra-args]

Вся программа должна посчитать выражение: (a*b) % c.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<stdio.h>
 
int main()
{
    unsigned long long a, b, m;
    scanf("%llu %llu %llu", &a, &b, &m);
    unsigned long long n, i;
    n=64;
    i=63;
    while(i!=n) {
        printf("%llu %llu %llu\n", ((b>>i)&1), i, n);
        if((b>>i)&1) n=i;
        else i--;
    }
    printf("%llu\n", n);
    unsigned long long r;
    r=((a % m)*(((b>>n)&1) % m) % m);
    for(i=n; i>0; i--) r=((((r*(2 % m)) % m)+(((a % m)*(((b>>(i-1)) & 1) % m)) % m)) % m);
    printf("%llu\n", r);
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.10.2016, 18:12

СИ printf scanf
пришлось сталкнуться с этим замечательным языком помогите понять зачем %d #include &lt;stdio.h&gt; int main() { int a; ...

printf/scanf
Возник вопрос. int main(void) { printf(&quot;Hello world&quot;); } Что происходит здесь? Подключение в дебаге хедера &lt;stdio.h&gt;...

masm32 printf scanf .if
Доброго времени суток! Народ, подскажите, как в данном примере мне с помощью printf и scanf вводить и выводить данные? Просто по поводу...

Scanf и printf не объявлены
#include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; void main() { int i,n,b; int A,a; while(1) { ...

Символы %ls и %lc в printf и scanf
Здравствуйте. wchar_t c; wchar_t str; c = _getwch(); // считывает символ правильно. Проверял, коды совпадают c unicode: // а -...


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

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru