Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.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,我遇到了一个问题,我的字符串系列没有按我想要的方式打印出来。它只打印最后一个字符串并反转最后一个字符串,但不打印之前的任何字符串。有人能帮我吗 #include <stdio.h> #include <string.h> void reverse(char strings[80], int start, int end); int main (void){ char strings[80]; printf("\tEnter a string to rever

我遇到了一个问题,我的字符串系列没有按我想要的方式打印出来。它只打印最后一个字符串并反转最后一个字符串,但不打印之前的任何字符串。有人能帮我吗

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

void reverse(char strings[80], int start, int end);
int main (void){

  char strings[80];

  printf("\tEnter a string to reverse: \n");
  while( scanf ("%s", strings) !=EOF);

  reverse(strings, 0, strlen(strings)-1);
  printf("\tThe reverse strings: \n%s\n",strings);

return 0;}
void reverse(char strings[80], int start, int end)
{
  char A;
  if (start >= end)
  return;

  A = *(strings+start);
  *(strings+start) = *(strings+end);
  *(strings+end) = A;

  reverse (strings, ++start, --end);
}

您对reverse和printf的调用不在while循环中,因此对于读取的最后一个字符串,每个调用只调用一次

应该是

while (scanf ("%s", strings) != EOF)
{
    reverse(strings, 0, strlen(strings)-1);
    printf("\tThe reverse strings: \n%s\n",strings);
}

我只是在这里猜测,当扫描%s时,字符串=EOF;,它会扫描字符串直到EOF,而不做任何处理,并用下一个字符覆盖最后一个字符,这并没有什么帮助。如果在控制台中键入80个“A”字符,会发生什么情况?实际上,这将以相反的方式打印您输入的每一行,直到您按住CTRL-D EOF键,但我不确定您是否真的在尝试这样做。我已经尝试过了。这次它改变了只允许我输入一个字符串的部分。我很困惑?它假设首先要求打印一系列用户想要反转的字符串。然后倒转那些弦。最初没有EOF输入,它只接受一个字符串。不清楚你想做什么。如果您试图读取由空格分隔的一组字符串,则必须使用strotk将它们全部拆分。问题是,当您使用scanf%s字符串时,它将整行视为一个完整的字符串,因为空格仍然是字符串中包含的字符。