首页 > 解决方案 > C 语言:Scanf

问题描述

这是一个简单的 C 程序,它解释了 do while 循环。在循环结束之前有两个 scanf 。/我真的对一个“ scanf("%d",&dummy); ”感到困惑。没有这一行,程序将无法按预期运行。所以,我相信这条线作为某种占位符来创建一个空间来接受聊天输入。但我不确定这一点以及它实际上是如何工作的

#include<stdio.h>  
#include<stdlib.h>  
void main ()  
{  
    char c;  
    int choice,dummy;    
    do{  
    printf("\n1. Print Hello\n2. Print Javatpoint\n3. Exit\n");  
    scanf("%d",&choice);  
    switch(choice)  
    {  
        case 1 :   
        printf("Hello");   
        break;  
        case 2:    
        printf("Javatpoint");  
        break;  
        case 3:  
        exit(0);   
        break;  
        default:   
        printf("please enter valid choice");      
    }  
    printf("do you want to enter more?");   
    scanf("%d",&dummy);  //This part confuses me
    scanf("%c",&c);  
    }while(c=='y');  
}  

标签: cscanf

解决方案


一旦用户输入一个选项并按下Enter键,数字将被读取到但不包括行尾字符。没有这个scanf("%d", %dummy);,行尾字符仍然存在并被读入c. 由于不等于'y',因此您的循环终止。

通过scanf("%d", dummy);调用,空格被消耗以寻找数字。请注意,scanf 文档说:“在尝试解析输入之前,除了 [、c 和 n 之外的所有转换说明符都会消耗并丢弃所有前导空白字符(就像通过调用 isspace 一样确定)。” 当遇到非空白、非数字字符(例如“y”或“n”)时,整数的读取失败。没关系,反正你无视。但是现在“y”或“n”可以读入c

更简单的方法是更改scanf("%c", &c);​​为scanf(" %c", &c);(注意 之前的空格%c)。这告诉scanf在将字符读入c. 它更加地道。


推荐阅读