Ошибка в коде (перевод с паскаля) - 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;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Функция check принимает на вход строку и проверяет, является ли она палиндромом
- В функции main мы объявляем массив str типа char, который будет содержать строку
- Мы считываем строку с помощью функции gets(str) и передаем ее в функцию check
- Если функция check вернула 1, то выводим
Palindrome, иначе выводимNot palindrome - Функция check возвращает 1, если строка является палиндромом, и 0 в противном случае
- В функции check мы используем цикл for для сравнения символов строки
- Мы сравниваем каждый символ строки со своим
зеркальнымсимволом, сдвинутым на длину строки вправо - Если найден хотя бы один несовпадающий символ, то возвращаем 0
- Если все символы совпадают, то возвращаем 1
- В функции main мы не обрабатываем ошибки, поэтому если ввод пользователя некорректен (например, содержит пробелы или символы, которые не являются буквами), то программа выдаст неопределенное поведение
- Если в строке есть пробелы, то перед вызовом функции check их нужно удалить, иначе они могут влиять на результат проверки
- Если строка очень длинная, то возможна переполнение буфера, что может привести к серьезным проблемам безопасности
- Функция gets не проверяет переполнение буфера, поэтому она небезопасна для использования
- Мы используем функцию printf для вывода результата проверки палиндрома
- Параметр
Palindromeдля функции printf должен быть задан в кавычках, чтобы интерпретироваться как строка - Параметр
Not palindromeдля функции printf должен быть задан в кавычках, чтобы интерпретироваться как строка - Мы используем оператор return 0 в конце функции main, чтобы указать, что функция main успешно завершилась
- Функция main не обрабатывает ситуацию, когда ввод пользователя пустой или содержит только пробелы
- При вводе пустой строки или строки, состоящей только из пробелов, программа выведет
Not palindrome, так как не сможет найти ни одного совпадения