如果没有输入,如何退出代码?代码示例:检查字符串是不是为回文? (在 C 编程语言中)

Posted

技术标签:

【中文标题】如果没有输入,如何退出代码?代码示例:检查字符串是不是为回文? (在 C 编程语言中)【英文标题】:How to exit code if nothing is entered? Code example: Check if string is a palindrome or not? (in C Programming Language)如果没有输入,如何退出代码?代码示例:检查字符串是否为回文? (在 C 编程语言中) 【发布时间】:2019-05-13 02:02:13 【问题描述】:

问题:如果没有在 STDIN(控制台)中输入任何内容,如何退出代码?

例如:

*输入 “NULL - 无 - 零” :)

预期输出 (关闭程序退出循环)*


输入:

你好

输出:

你好不是回文


输入:

奥特

输出:

奥托是回文


代码说明: 回文是一个字符串短语,向后和向前读取相同。回文的例子有“ABCDCBA”、“otto”、“i am ma i”、“C”。编写一个程序,读入一行文本,并打印出该行文本是否为回文。

#include <stdio.h>
#include <string.h>

#define MAXLEN 100

void reverseString(char *str, char *reversedStr)

    int i;

    for (i=strlen(str)-1; i>=0; i--)
    
        *reversedStr++ = *(str+i);
    
    *reversedStr = '\0';



int main(int argc, char **argv) 
    char str[MAXLEN];
    char reversedStr[MAXLEN];

    while (fgets(str, sizeof(str)-1, stdin) != NULL)
    
        str[strlen(str)-1] = '\0'; // the last character is the newline. Replace with null
        reverseString(str, reversedStr);
        if (strcmp(str, reversedStr) == 0)
            printf("%s is a palindrome\n", str);
        else 
            printf("%s is not a palindrome\n", str);
        
    

    return 0;

代码片段: https://onlinegdb.com/ByGKe8LnE

【问题讨论】:

在您的代码中,如果用户不输入任何内容然后按回车键,那么在您将其替换为空终止符之前,唯一的字符就是换行符。因此您可以在替换之前检查这是否是唯一的字符,这样您就可以知道用户是否没有输入任何内容。 比较fgets'\0' 的返回值没有意义,因为你是在比较一个指向空字节的指针。相反,将其与空 指针 进行比较,即while (fgets(...) != NULL)。然后它应该做你想要的。 @TomKarzes 感谢这实际上在原始代码中,但对其进行了编辑以查看是否会影响代码 @ChrisRollins 你将如何在代码中实现它? 您的代码有效。只需在输入后立即按 ctrl-d(表示输入结束)即可退出。 【参考方案1】:

您的代码有效。只需在输入后立即按 ctrl-d(表示输入结束)即可退出。

其他几件事:

fgets() 不需要 size 减 1。根据手册:“fgets() 最多读取小于 size 个字符...” 实际上没有必要复制/反转整个字符串并进行比较,一半就足够了,或者您可以简单地从开始到结束进行比较,直到中心,而不需要复制。 strlen()“遍历”字符串 - 您可以重复使用它的结果而不是再次调用。

.

#include <stdio.h>
#include <string.h>

#define MAXLEN 100

int isPalindrome(char *str, size_t len) 
    char *end = str + len - 1;
    while (end > str)
        if (*end-- != *str++) return 0;
    return 1;


int main(int argc, char **argv) 
    char str[MAXLEN];
    while (fgets(str, sizeof(str), stdin) != NULL) 
        size_t len = strlen(str) - 1;
        str[len] = 0; // the last character is the newline. Replace with null char
        printf("%s is %sa palindrome\n", str, isPalindrome(str, len) ? "" : "not ");
    
    return 0;

【讨论】:

以上是关于如果没有输入,如何退出代码?代码示例:检查字符串是不是为回文? (在 C 编程语言中)的主要内容,如果未能解决你的问题,请参考以下文章

Python练习题9(密码判断):请写一个密码安全性检查的代码代码: 首先判断密码的强度,如果结果是低或中则打印如何提升密码安全级别的提示,而高则直接退出

如何通过批处理文件检查服务是否正在运行并启动它,如果它没有运行?

如果在 C 中使用 scanf 输入字符,如何获取打印错误

如何检查特定文件是不是存在以及使用哪个退出代码?

如何检查 SQLDataReader 是不是没有行

在 Python 中,如何检查 Selenium WebDriver 是不是已退出?