【问题标题】:C: check if a 3-digit number is palindromicC:检查一个 3 位数字是否是回文数
【发布时间】:2016-01-17 13:24:46
【问题描述】:

所以我编写了一个程序,它从用户那里获取一个 3 位数字并检查它是否是回文:

#include <stdio.h>
#include <stdlib.h>
int isPalindromic(char q, char w, char e); 
int main()
{
    int res;
    char a,b,c;

    printf("Give me a three digit number\n");
    scanf("%c %c %c", &a, &b, &c);
    res = isPalindromic(a,b,c);

    if (res == 1)
       printf("damn son that's palindromic how u do dat u a haker!!!\n");
    else
        printf("B O O O  L O S E R\n");

    system("pause");
    return 0;   
}

int isPalindromic(char q, char w, char e)
{
   int result;
   if (q == e)               
       result = 1;
    else
        result = 0;
    return result;                     
}

由于懒惰,我想到了将每个数字作为字符而不是整数,然后 isPalindromic 函数将第一个数字与第三个数字进行比较。

它就像一个魅力,但它有任何弱点或某事吗? 我做错了什么吗?

【问题讨论】:

  • 如果用户输入“zrz”怎么办?你认为这是一个回文的 3 位数字吗?如果不是,那么你的方法很糟糕。
  • 是的,您应该检查用户是否真的输入了数值或任何char
  • 查看scanf()的返回。
  • @Magix & Haris 喜欢这样吗? if (a >= '0' && a = '0' && b = '0' && c
  • isdigit 应该足以进行数字检查。

标签: c function if-statement palindrome


【解决方案1】:

您可以通过编写一个检查任何字符字符串是否为回文的函数来使程序更通用:

int ispal(const char *s)
{
    int start, mid, end;

    mid = strlen(s) / 2;
    end = strlen(s) - 1;

    for (start = 0; start < mid; ++start, --end)
        if (s[start] != s[end])
            return 0;      /* not palindrome */

     if (start == mid)
         return 1;         /* palindrome */
}

然后您可以检查用户输入是否为 3 位数字(isdigitstrlen),如果是,则将其作为输入传递给 ispal 函数。这种通用方法使您的应用程序在未来更具可扩展性。

编辑:不要使用system("pause"),因为并非所有系统都支持pause 命令。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    相关资源
    最近更新 更多