6

我正在学习 C 编程。%c我写了一个奇怪的循环,但在我使用in时不起作用scanf()
这是代码:

#include<stdio.h>
void main()
{
    char another='y';
    int num;
    while ( another =='y')
    {
        printf("Enter a number:\t");
        scanf("%d", &num);
        printf("Sqare of %d is : %d", num, num * num);
        printf("\nWant to enter another number? y/n");
        scanf("%c", &another);
    }
}

但是如果我%s在这段代码中使用,例如scanf("%s", &another);,那么它工作正常。
为什么会这样?任何想法?

4

4 回答 4

10

转换从输入中%c读取下一个单个字符,无论它是什么。在这种情况下,您之前使用 读取了一个数字%d。您必须按回车键才能读取该数字,您没有做任何事情来从输入流中读取换行符。因此,当您进行%c转换时,它会从输入流中读取换行符(无需等待您实际输入任何内容,因为已经有输入等待读取)。

当您使用%s时,它会跳过任何前导空白以获取除空白以外的某些字符。它将换行符视为空白,因此它隐式跳过等待的换行符。由于(可能)没有其他内容等待阅读,因此它会继续等待您输入某些内容,正如您显然希望的那样。

如果要%c用于转换,可以在格式字符串中在其前面加上一个空格,这也将跳过流中的任何空格。

于 2012-12-11T05:29:02.507 回答
2

在您输入第一个 scanf %d 的数字后,ENTER 键位于标准输入流中。该键被 scanf %c 行捕获。

使用scanf("%1s",char_array); another=char_array[0];.

于 2012-12-11T05:43:03.027 回答
1

在这种情况下使用getch()而不是。scanf()因为 scanf() 需要 '\n' 但您在该 scanf() 处只接受一个字符。所以 '\n' 给下一个 scanf() 造成混乱。

于 2012-12-11T05:28:29.350 回答
0
#include<stdio.h>
void main()
{
char another='y';
int num;
while ( another =='y')
{
    printf("Enter a number:\t");
    scanf("%d", &num);
    printf("Sqare of %d is : %d", num, num * num);
    printf("\nWant to enter another number? y/n");
    getchar();
    scanf("%c", &another);
}
}
于 2012-12-11T05:30:52.197 回答