Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果未输入任何内容,如何退出代码?代码示例:检查字符串是否为回文?(用C语言编程)_C - Fatal编程技术网

如果未输入任何内容,如何退出代码?代码示例:检查字符串是否为回文?(用C语言编程)

如果未输入任何内容,如何退出代码?代码示例:检查字符串是否为回文?(用C语言编程),c,C,问题:如果STDIN控制台中没有输入任何内容,如何退出代码 例如: *输入 空-无-零: 预期产量 关闭程序退出循环* 输入: 你好 输出: Hello不是回文 输入: 奥托 输出: 奥托是一个回文 代码说明: 回文是一个字符串短语,前后读相同。回文的例子有“ABCDCBA”、“otto”、“i am ma i”、“C”。编写一个程序,读入一行文本,并打印出该行文本是否为回文 #include <stdio.h> #include <string.h> #define

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

例如:

*输入 空-无-零:

预期产量 关闭程序退出循环*

输入:

你好

输出:

Hello不是回文

输入:

奥托

输出:

奥托是一个回文

代码说明: 回文是一个字符串短语,前后读相同。回文的例子有“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;
}
代码段:
您的代码可以正常工作。只需在输入结束后按ctrl-d键即可退出

还有两件事:

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


在代码中,如果用户不输入任何内容,然后按enter键,那么在用null终止符替换换行符之前,唯一的字符就是换行符。因此,您可以在替换之前检查这是否是唯一的字符,这样您就可以知道用户是否没有输入任何内容。将fgets的返回值与“\0”进行比较没有意义,因为您是在比较指向空字节的指针。相反,将其与空指针进行比较,即当fgets…!=无效的然后它应该做你想要做的。@TomKarzes谢谢,这实际上是在原始代码中,但编辑它以查看这是否会影响code@ChrisRollins您将如何在代码中实现这一点?您的代码是有效的。只需在输入结束后按ctrl-d键即可退出。
#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;
}