单词交换期间没有输出

时间:2015-08-15 19:04:16

标签: c string pointers

#include <stdio.h>
#include <ctype.h>   /* for access to the toupper function */

void reverse_name(char *name);


int main(void)
{
    char input[100];

    printf("Enter a first and last name: ");
    gets(input);
    reverse_name(input);
    return 0;
}

void reverse_name(char *name){
    char *first = name;
    char *see;
    see = name;
    while(*see != ' '){
    }
    while(*see != '\n'){
        putchar(*see);
    }
    printf(", %c",*first);
}

我希望这种情况发生:输入名字和姓氏:Lloyd Fosdick

输出如下:Fosdick,L。

但是在输入名字和劳埃德·福斯迪克后,该计划没有给出任何答案,也没有任何反应?代码怎么了?

2 个答案:

答案 0 :(得分:2)

在两个while循环中既不增加see也不检查0终结符:

while(*see && *see != ' '){
   see++;
}

while(*see && *see != '\n'){
   putchar(*see);
   see++;
}

gets()已从C11中删除,即使您遵循较旧的标准,也不应使用它。请改用fgets()

这绝不是一个完整的解决方案。你必须问问自己:

  • 如果输入名称之间包含多个空格怎么办?
  • 如果输入包含两个以上的名称怎么办?
  • 如果没有名字或姓氏怎么办?
  • 等。

您需要考虑所有这些情况并在代码中处理它们。

答案 1 :(得分:0)

你有一个无限循环

while(*see != ' '){}

您需要递增指针位置。