Ошибка в коде (перевод с паскаля) - C (СИ)

Узнай цену своей работы

Формулировка задачи:

есть код на паскале
uses crt;
var a,b,c:longint;
begin
clrscr;
write('Введите целое положительное число a=');
readln(a);
b:=a;
c:=0;
while b>0 do
begin
c:=c*10+(b mod 10);
b:=b div 10;
end;
writeln(c);
if c=a then write('Палиндром')
else  write('Не палиндром');
readln
end.
но мне он нужен в си, попробовал перевести сам, но программа работает неправильно
#include <stdio.h>
int main()
{
    long int a,b,c;
    printf ("Введите целое положительное число а=\n");
    scanf ("%ld", a);
    b=a;
    c=0;
    while (b>0)
    {
        c=c*10+(b%10);
        b=b/10;
    }
    if (c=a) printf ("Палиндром\n");
    else printf ("Не палиндром\n");
    return 0;
}
помогите исправить

Решение задачи: «Ошибка в коде (перевод с паскаля)»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
int check (char str[])
{
    int i,length;
    length=strlen(str);
    for (i=0;i<length;i++)
        if (str[i]!=str[(length-1)-i]) return 0;
    return 1;
}
int main()
{
    char str[80]; // где N-любое количество элементов массива
    gets(str);
    if (check(str)==1) printf ("Palindrome");
    else printf("Not palindrome");
            return 0;
}

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы
  2. Функция check принимает на вход строку и проверяет, является ли она палиндромом
  3. В функции main мы объявляем массив str типа char, который будет содержать строку
  4. Мы считываем строку с помощью функции gets(str) и передаем ее в функцию check
  5. Если функция check вернула 1, то выводим Palindrome, иначе выводим Not palindrome
  6. Функция check возвращает 1, если строка является палиндромом, и 0 в противном случае
  7. В функции check мы используем цикл for для сравнения символов строки
  8. Мы сравниваем каждый символ строки со своим зеркальным символом, сдвинутым на длину строки вправо
  9. Если найден хотя бы один несовпадающий символ, то возвращаем 0
  10. Если все символы совпадают, то возвращаем 1
  11. В функции main мы не обрабатываем ошибки, поэтому если ввод пользователя некорректен (например, содержит пробелы или символы, которые не являются буквами), то программа выдаст неопределенное поведение
  12. Если в строке есть пробелы, то перед вызовом функции check их нужно удалить, иначе они могут влиять на результат проверки
  13. Если строка очень длинная, то возможна переполнение буфера, что может привести к серьезным проблемам безопасности
  14. Функция gets не проверяет переполнение буфера, поэтому она небезопасна для использования
  15. Мы используем функцию printf для вывода результата проверки палиндрома
  16. Параметр Palindrome для функции printf должен быть задан в кавычках, чтобы интерпретироваться как строка
  17. Параметр Not palindrome для функции printf должен быть задан в кавычках, чтобы интерпретироваться как строка
  18. Мы используем оператор return 0 в конце функции main, чтобы указать, что функция main успешно завершилась
  19. Функция main не обрабатывает ситуацию, когда ввод пользователя пустой или содержит только пробелы
  20. При вводе пустой строки или строки, состоящей только из пробелов, программа выведет Not palindrome, так как не сможет найти ни одного совпадения

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.4 из 5