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