使用scanf的C中的回文,并且没有字符串库函数

时间:2019-01-31 01:02:54

标签: c

分配是获取输入字符串,并且不使用任何字符串库函数来处理该字符串。此刻此代码甚至无法打印出我输入的字符串。当我从main中删除函数时,它神奇地开始打印。任何帮助将不胜感激

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

#define SIZE 32

int isQuit(char str[]);
void isPalindrome(char str[]);


int main (){
    int cont = 0;
   char str[SIZE];
   fflush(stdin);
   printf("please enter a word:\n");
   scanf("%s\n", str);
   printf("%s\n", str);

  while(cont == 0)
  {
    scanf("%s\n", str);
   printf("%s\n", str);
     cont =  isQuit(str);
    isPalindrome(str);
  }
   return 0;
}

2 个答案:

答案 0 :(得分:1)

您很可能正遭受终端中行缓冲的困扰。在您编写换行符之前,不会显示任何写入的字符。

在显示输入内容时尝试添加换行符:

printf("%s\n", str);

您要确保显示的所有其他printf呼叫也一样。

顺便说一句,您的零终止测试不正确。转义字符是\,而不是/。将循环更改为:

while (str[h] != '\0')

或者简单地:

while (str[h])

答案 1 :(得分:0)

这里的代码有些错误:

while(isQuit(str) == 0)
{ 
    isPalindrome(str);
    return 0 ;
}

由于循环主体中(无条件地)有return关键字,因此循环最多执行一次。

此外,isQuitisPalindrome都不接受用户的输入。这意味着,即使您通过删除return语句来修复循环,它的 still 也不正确;您会遇到isQuitisPalindrome的无限循环,并传递了第15行用户要求的相同str

除了@paddy的答案中指出的问题之外,您需要做的是更改while循环以不断轮询用户以进行输入并采取行动。