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.
或者:
由于禁止内存访问导致程序崩溃
问候安德烈
我无法理解 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.
或者:
由于禁止内存访问导致程序崩溃
问候安德烈