我创建了一个程序,要求用户输入他们的名字,然后以多种方式操作它最后一种操作方法是反向打印用户名。例如,如果用户输入John Doe,程序将打印Doe John我现在唯一的问题是阻止我的程序在姓和名之间添加不必要的新行。
例子:
我想让多伊·约翰接一个电话,但我得到了

Doe
John

为了我的作业,我需要去掉这条多余的线我该怎么做?
#include <stdio.h>
#include <string.h>

void removeNewLine (char * userName, int charLenght)
{
    int i=0;

    do {
        if (userName [i]=='\n')
        {
            userName [i]='\0';
        }
    i++;
    } while (i<charLenght);

}

// This is going to tell me exactly how many real character are in my array
int myCounter (char * userName, int size)
{
    int counter=0;
        do
        {
            if(userName [counter]=='\0')
            {
                return counter; //I always thought that you needed to put your return at the end of the function, this is good to know that you don't need too
            }
            counter++;
        }while (counter<size);
    return -1;
}


int main ()
{
printf("Enter your first and last name\n");

char name [250]={'\0'};
char * space;
char *first=NULL, *last = NULL, *firstspace;
char *userName;
int numOfChars=0;
//Prevents the potential problem of an overflow = (sizeof(name)-1)
fgets(name,(sizeof(name)-1),stdin);

//This is what is actually doing the dirty work of removing the extra chars

removeNewLine(userName, numOfChars);

//This is going to count the number of characters that were input by the user

numOfChars = strlen(name)-1;

printf("You Entered: %s     \n", name);
printf("There are %zu characters in your name including the space. \n", strlen(name));

char end;
int i;
end = strlen(name) -1;
printf("Your name backwards is");
for (i = end; i >= 0; --i)
{
printf("%c", name [i]);
}

printf("\nLooking for the space in your name \n", name);
firstspace=space=strchr(name, ' ');
*firstspace='\0';
while (space!=NULL)
{
    printf("The space was found at character %d\n", space-name+1);
    last = space+1;
    space=strchr(space+1, ' ');
}

printf("%s%s", last, name);
*firstspace=' ';

//This is just to tell the user how many "real" characters were in there name
printf("\n There are %d actual characters in your name including the space", numOfChars);


 }

最佳答案

稍加修改,在下面两行互换

    removeNewLine(userName, numOfChars);

    //This is going to count the number of characters that were input by the user

    numOfChars = strlen(name)-1;

这样地
numOfChars = strlen(name); // first find the length of input.
removeNewLine(name, numOfChars); // And now remove newline at the end of input

编辑
你的代码
#include <stdio.h>
#include <string.h>

void removeNewLine (char * userName, int charLenght)
{
    int i=0;

    do {
        if (userName [i]=='\n')
        {
            userName [i]='\0';
        }
    i++;
    } while (i<charLenght);

}


int main ()
{
printf("Enter your first and last name\n");

char name [250]={'\0'};
char * space;
char *first=NULL, *last = NULL, *firstspace;
int numOfChars=0;
//Prevents the potential problem of an overflow = (sizeof(name)-1)
fgets(name,(sizeof(name)-1),stdin);

//This is what is actually doing the dirty work of removing the extra chars

numOfChars = strlen(name); // first find the length of input.
removeNewLine(name, numOfChars); // And now remove newline at the end of input
printf("You Entered: %s     \n", name);
printf("There are %zu characters in your name including the space. \n", strlen(name));

char end;
int i;
end = strlen(name) -1;
printf("Your name backwards is");
for (i = end; i >= 0; --i)
{
printf("%c", name [i]);
}

printf("\nLooking for the space in your name \n", name);
firstspace=space=strchr(name, ' ');
*firstspace='\0';
while (space!=NULL)
{
    printf("The space was found at character %ld\n", space-name+1);
    last = space+1;
    space=strchr(space+1, ' ');
}

printf("%s %s", last, name);
*firstspace=' ';

//This is just to tell the user how many "real" characters were in there name
printf("\n There are %d actual characters in your name including the space", numOfChars);


 }

输出
Enter your first and last name
John Doe
You Entered: John Doe
There are 8 characters in your name including the space.
Your name backwards iseoD nhoJ
Looking for the space in your name
The space was found at character 5
Doe John
 There are 9 actual characters in your name including the space

08-19 18:24