getchar() != ' ' 和 getchar() = ' '

getchar() != ' ' and getchar() = ' '

我无法理解 getchar() != ' 'getchar() = ' ' 在我的代码中所做的事情。 为什么需要对立面。 用户可以在名字和姓氏之间、名字之前和姓氏之后输入额外的空格。

#include <stdio.h>

int main(void) {

    char c, initial;

    printf("Enter a first and last name: ");
    scanf(" %c", &initial);
    printf("%c\n", initial);
    while ((c = getchar()) != ' ')
        ;

    while ((c = getchar()) == ' ')
        ;

    do {
        putchar(c);
    } while ((c = getchar()) != '\n' && c != ' ');

    printf(", %c.\n", initial);

    return 0;
}

在此代码段中

scanf(" %c", &initial);
// printf("%c\n", initial); <== remove this statement
while ((c = getchar()) != ' ')
    ;

读名字的第一个字母,跳过其他字母。

这个循环

while ((c = getchar()) == ' ')
    ;

跳过名字和第二个名字之间的空格。

这个循环

do {
    putchar(c);
} while ((c = getchar()) != '\n' && c != ' ');

输出第二个名字的所有字母。

最后在完整的第二个名字之后输出名字的第一个字母。

例如,如果您输入

Nick     Fisher

那么输出应该是

Fisher, N.

考虑到您应该删除该声明

printf("%c\n", initial);

这是一个多余的陈述。

关于:

while ((c = getchar()) != ' ')
    ;

while ((c = getchar()) == ' ')
    ;

第一个 while() 循环消耗了名字的其余部分

第二个 while() 循环消耗名字和姓氏之间的空格。

使用字符作为首字母,然后向其中写入大量字符,这不会有问题吗?我认为您使用的是未分配的内存作为名称。
第一个 printf("%c\n", initial); 应该生成输入的第一个字符的输出。

太棒了...
输入:
尼克费舍尔

输出:
N
N.费舍尔

或者:

费舍尔,N.
或者:
由于禁止内存访问导致程序崩溃

问候安德烈