Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言:Scanf_C_Scanf - Fatal编程技术网

C语言:Scanf

C语言:Scanf,c,scanf,C,Scanf,这是一个简单的C程序,它解释了do while循环。在循环结束之前,有两个scanf/ 我真的被一个“scanf(“%d”,&dummy);”弄糊涂了。离开此行时,程序将无法按预期运行。所以,我相信这行代码可以充当某种占位符,为聊天创建一个输入空间。但我不确定这一点以及它究竟是如何工作的 #include<stdio.h> #include<stdlib.h> void main () { char c; int choice,dumm

这是一个简单的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');  
}  
#包括
#包括
空干管()
{  
字符c;
智力选择,哑巴;
做{
printf(“\n1.Print Hello\n2.Print Javatpoint\n3.Exit\n”);
scanf(“%d”,选择(&C);
开关(选择)
{  
案例1:
printf(“你好”);
打破
案例2:
printf(“Javatpoint”);
打破
案例3:
出口(0);
打破
违约:
printf(“请输入有效选项”);
}  
printf(“是否要输入更多?”);
scanf(“%d”,&dummy);//这部分让我很困惑
scanf(“%c”、&c);
}而(c='y');
}  

一旦用户输入一个选项并按Enter键,数字将被读取到但不包括行尾字符。没有这个
scanf(“%d”,%dummy)
,该行尾字符仍然存在,并被读入
c
。因为这不等于
'y'
,所以循环终止

使用
scanf(“%d”,虚拟)调用时,空格会被用来查找数字。请注意,“除[、c和n以外的所有转换说明符在尝试解析输入之前使用并丢弃所有前导空格字符(如同调用isspace一样确定)。”当遇到非空格、非数字字符时(例如“y”或“n”),读取整数失败。没关系,您还是忽略了它。但是现在可以将“y”或“n”读入
c


更简单的方法是将
scanf(“%c”、&c);
更改为
scanf(“%c”、&c);
(注意
%c
前面的空格)。这告诉
scanf
在将字符读入
c
之前使用任何空格。这更为惯用。

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

使用
scanf(“%d”,dummy);
调用时,会使用空格查找数字。请注意,“除[、c和n以外的所有转换说明符都会在尝试解析输入之前使用并丢弃所有前导空格字符(如同调用isspace一样确定)。”当遇到非空白、非数字字符(如“y”或“n”)时,读取整数会失败。没关系,您还是忽略了它。但现在可以将“y”或“n”读入
c


更简单的方法是将
scanf(“%c”、&c);
更改为
scanf(“%c”、&c);
(注意
%c
前面的空格)。这告诉
scanf
在将字符读入
c
之前使用任何空格。这更为惯用。

因为变量
dummy
用于捕获以下选择编号的
返回值

如果我们在打印中添加一行

printf([%c]\n,dummy);//我们应该将dummy的类型更改为char,这里省略
这是对结果的解释:

1.打印Hello
2.打印Javatpoint
3.退出
1#这是输入:1和一个无形回报
您好,您想输入更多吗?[#返回由scanf捕获并打印
]
y#这是输入:y和一个不可见的返回,返回被scanf(“%d”,&choice)忽略,因为它需要数字
1.打印Hello
2.打印Javatpoint
3.退出
2#这是输入:n和一个不可见的返回
Javatpoint是否要输入更多信息[
]
N

因为变量
dummy
用于捕获
返回值
以下选项编号

如果我们在打印中添加一行

printf([%c]\n,dummy);//我们应该将dummy的类型更改为char,这里省略
这是对结果的解释:

1.打印Hello
2.打印Javatpoint
3.退出
1#这是输入:1和一个无形回报
您好,您想输入更多吗?[#返回由scanf捕获并打印
]
y#这是输入:y和一个不可见的返回,返回被scanf(“%d”,&choice)忽略,因为它需要数字
1.打印Hello
2.打印Javatpoint
3.退出
2#这是输入:n和一个不可见的返回
Javatpoint是否要输入更多信息[
]
N

当使用%c时,scanf会留下一个“\n”字符供下一个scanf读取,此时会发生这种情况

解决方案:在报告的程序中将%c替换为%1s以解决问题(要读取下一个非空白字符,请使用%1s而不是%c)

由于换行符,请参考下面的程序查看问题

[root@localhost程序]#cat-n scan.c

 #include<stdio.h>  
 #include<stdlib.h>  
 int main ()  
 {  
     char c = 0;  
     int choice,dummy;    
     do{  
     printf("\n1. Print Hello\n2. Print Javatpoint\n3. Exit\n");  
     scanf("%d",&choice);  
     switch(choice)  
     {  
         case 1 :   
         printf("Hello\n");   
         break;  
         case 2:    
            printf("Javatpoint\n");  
            break;  
            case 3:  
            exit(0);   
       break;  
            default:   
            printf("please enter valid choice\n");      
        }  
        printf("say 'y' if you want to enter more\n");   
        scanf("%c",&c);
        printf("%d\n",c);
        scanf("%c",&c);
        printf("%d\n",c);
        }while(c=='y');  
        return 0;
    }  
#包括
#包括
int main()
{  
字符c=0;
智力选择,哑巴;
做{
printf(“\n1.Print Hello\n2.Print Javatpoint\n3.Exit\n”);
scanf(“%d”,选择(&C);
开关(选择)
{  
案例1:
printf(“Hello\n”);
打破
案例2:
printf(“Javatpoint\n”);
打破
案例3:
出口(0);
打破
违约:
printf(“请输入有效选项\n”);
}  
printf(“如果要输入更多信息,请说“y”);
scanf(“%c”、&c);
printf(“%d\n”,c);
scanf(“%c”、&c);
printf(“%d\n”,