Getchar() 跳过 while 循环中扫描的第一个值

Getchar() skips the first value scanned in while loop

我正在尝试 select 扫描所有单个值(不能使用数组或字符串)一次一个。现在,它跳过了用户实现的第一个值,我不知道为什么。我希望循环在 getchar 到达“=”时停止,“=”将位于扫描值的末尾。

int main () {
char c;
while(scanf("%c", &c) != '=') {
 c=getchar();
 printf("print ");
 putchar(c);

 }
return 0;
}

在终端中,当我输入“a=”时,我只收到“=”而不是“a”。有人可以帮忙吗?

while 循环中的条件和下面的 getchar 调用没有意义。

while(scanf("%c", &c) != '=') {
 c=getchar();
 //...

例如*The C Standard, 7.21.6.4 the scanf function)

3 The scanf function returns the value of the macro EOF if an input failure occurs before the first conversion (if any) has completed. Otherwise, the scanf function returns the number of input items assigned, which can be fewer than provided for, or even zero, in the event of an early matching failure.

调用scanf读取的字符不输出

你应该写

char c;
while( scanf(" %c", &c) == 1 && c != '=') {
 printf("print %c", c);
}

注意这次scanf的调用

scanf( " %c", &c)

将跳过白色 space 字符。如果你想输出任何字符,那么你需要删除转换说明符前的空白,如

scanf( "%c", &c)
       ^^^^ 

如果你想使用 getchar 那么循环看起来像

int c;
while( ( c = getchar() ) != EOF && c != '=') {
 printf("print %c", c);
}

在这种情况下,如您所见,变量 c 必须声明为 int.

类型

scanf() 函数 return 是成功转换和分配的字段数。

您可以在此处阅读更多内容:https://www.ibm.com/docs/en/i/7.3?topic=functions-scanf-read-data

在您的情况下,如果成功扫描并分配 c,它将 return1,否则为 0。

以上文档是特定于平台的,但下面的方法仍然适用于任何地方。

如果您希望循环在字符为“=”时结束,那么您可以简单地与 if 条件进行比较并中断循环:

int main () {
char c;
while(1) {
 c=getchar();
 if (c == '=') {
   break;
 }
 printf("print ");
 putchar(c);

 }
return 0;
}