Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.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编程——为什么gets()不接受输入? #包括 int main() { 智力选择; char-sl[10]; char-phn[10]; printf(“输入选项:”); scanf(“%d”,选择(&C); 开关(选择) { 案例1: printf(“\n输入学生详细信息:\n\n”); printf(“\n输入序列号:”); 获取(sl); printf(“卷号:”); 获取(phn); 违约: 打破 } 返回0; }_C_Scanf - Fatal编程技术网

C编程——为什么gets()不接受输入? #包括 int main() { 智力选择; char-sl[10]; char-phn[10]; printf(“输入选项:”); scanf(“%d”,选择(&C); 开关(选择) { 案例1: printf(“\n输入学生详细信息:\n\n”); printf(“\n输入序列号:”); 获取(sl); printf(“卷号:”); 获取(phn); 违约: 打破 } 返回0; }

C编程——为什么gets()不接受输入? #包括 int main() { 智力选择; char-sl[10]; char-phn[10]; printf(“输入选项:”); scanf(“%d”,选择(&C); 开关(选择) { 案例1: printf(“\n输入学生详细信息:\n\n”); printf(“\n输入序列号:”); 获取(sl); printf(“卷号:”); 获取(phn); 违约: 打破 } 返回0; },c,scanf,C,Scanf,C语言编程: 我在这里使用了2 get()函数。第二个有效,但第一个无效。为什么?如何让它工作 注意:我想将“sl”和“phn”变量作为char类型,并使用get()获取输入。 请有人帮助……切勿使用get()。它不提供针对缓冲区溢出漏洞的保护(即,您无法告诉它您传递给它的缓冲区有多大,因此它无法阻止用户输入比缓冲区大的行并破坏内存) fgets()是安全的,因为您可以通过传递缓冲区大小(包括空值空间)来保证不会溢出输入字符串缓冲区 最重要的区别是fgets()知道字符串有多大 是,而get()

C语言编程:

我在这里使用了2 get()函数。第二个有效,但第一个无效。为什么?如何让它工作

注意:我想将“sl”和“phn”变量作为char类型,并使用get()获取输入。 请有人帮助……

切勿使用
get()
。它不提供针对缓冲区溢出漏洞的保护(即,您无法告诉它您传递给它的缓冲区有多大,因此它无法阻止用户输入比缓冲区大的行并破坏内存)

fgets()
是安全的,因为您可以通过传递缓冲区大小(包括空值空间)来保证不会溢出输入字符串缓冲区

最重要的区别是
fgets()
知道字符串有多大 是,而
get()
不是。这意味着几乎不可能写作 使用
gets()
安全代码,所以不要这样做


在那里,使用
fgets()
而不是
gets()
对所有输入使用fgets()。scanf通常会在输入流中留下换行符,这将导致FGET出现问题。使用sscanf解析整数的输入,并检查返回值以确保输入了整数

#include<stdio.h>
int main()
{
   int choice;
   char sl[10];
   char phn[10];
   printf("Enter choice: ");
   scanf("%d",&choice);
   switch(choice)
   {
   case 1:
       printf("\nEnter Student Details: \n\n");
       printf("\nEnter serial number: ");
       gets(sl);
       printf("Roll number: ");
       gets(phn);
   default:
      break;
   }
   return 0;
}
#包括
int main()
{
智力选择;
int结果=0;
char-sl[10];
char-phn[10];
字符输入[256];
做{
printf(“输入选项:”);
如果((fgets(输入,输入大小,标准输入))){
结果=sscanf(输入、%d、&choice);
如果(结果==0){
printf(“重试\n”);
}
}
否则{
fprintf(stderr,“获取输入的问题”);
返回1;
}
}而(结果!=1);
开关(选择)
{
案例1:
printf(“\n输入学生详细信息:\n\n”);
printf(“\n输入序列号:”);
if((fgets(sl,sizeof sl,stdin))==NULL){
fprintf(stderr,“获取序列号的问题”);
返回1;
}
printf(“卷号:”);
if((fgets(phn,phn的大小,stdin))==NULL){
fprintf(stderr,“获取卷号的问题”);
返回1;
}
打破
违约:
打破
}
返回0;
}

。改为使用。想一想:您为
scanf
输入的数字用什么键结束输入?提示:
Enter
键也将作为换行符放入输入缓冲区。
gets
是危险的,不推荐使用(从C11标准中删除)。使用
fgets
或者
#include  <stdio.h>
int main()
{
    int choice;
    int result = 0;
    char sl[10];
    char phn[10];
    char input[256];
    do {
        printf("Enter choice: ");
        if ( ( fgets ( input, sizeof input, stdin))) {
            result = sscanf( input, "%d", &choice);
            if ( result == 0) {
                printf ( "try again\n");
            }
        }
        else {
            fprintf ( stderr, "problem getting input\n");
            return 1;
        }
    } while ( result != 1);
    switch(choice)
    {
        case 1:
            printf("\nEnter Student Details: \n\n");
            printf("\nEnter serial number: ");
            if ( ( fgets ( sl, sizeof sl, stdin)) == NULL) {
                fprintf ( stderr, "problem getting serial number\n");
                return 1;
            }
            printf("Roll number: ");
            if ( ( fgets ( phn, sizeof phn, stdin)) == NULL) {
                fprintf ( stderr, "problem getting roll number\n");
                return 1;
            }
            break;
        default:
            break;
    }
    return 0;
}