Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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
GETS-C对我不起作用_C_Function_Printf_Gets - Fatal编程技术网

GETS-C对我不起作用

GETS-C对我不起作用,c,function,printf,gets,C,Function,Printf,Gets,在char变量中插入字符串时遇到问题。当我把它投入运行时,问题出现了。当我调试程序时,它显示printf,但它跳过get 这是我的密码: int uloz(SPRAVA *p){ char string[200]; printf("Your message here: "); gets(string); printf("You have entered: %s", string); getchar(); return 0; } stdio缓

在char变量中插入字符串时遇到问题。当我把它投入运行时,问题出现了。当我调试程序时,它显示
printf
,但它跳过
get

这是我的密码:

int uloz(SPRAVA *p){

    char string[200];

    printf("Your message here: ");
    gets(string);
    printf("You have entered: %s", string);
    getchar();

    return 0;
}

stdio缓冲区中有一个新行(由以前的
scanf
留下),因此
get
立即得到满足

没有简单的方法可以修复它,但您可以尝试在
fgets
之前丢弃输入:

while((c = getchar()) != '\n' && c != EOF)
    /* discard the character */;
真正的解决办法是避免混合使用
scanf
fgets



使用
fgets
而不是
gets
在stdio缓冲区中有一个换行符(由以前的
scanf
留下),因此
gets
立即得到满足

没有简单的方法可以修复它,但您可以尝试在
fgets
之前丢弃输入:

while((c = getchar()) != '\n' && c != EOF)
    /* discard the character */;
真正的解决办法是避免混合使用
scanf
fgets


使用
fgets
而不是
gets
使用
scanf(“%30[^\n]%*c”,字符串)

  • [^\n]
    将接受任何内容,直到
    \n

  • 30
    将字符数的长度限制为最多30个。
  • 初始
    空格(“”)
    将消耗stdin流中已有的任何
    \n
    。(可选&我尚未验证)
  • &最后,
    %*c
    将使用输入字符串后按下的
    \n
  • 我想,
    scanf(“%30[^\n]%*[^\n]%*c”,字符串)
    是一个很好的选择,可以丢弃输入的剩余字符(30后)。然而,这是完全未经证实的。只是添加了一个可能的想法。使用前测试。:-)

    使用
    scanf(“%30[^\n]%*c”,字符串)

  • [^\n]
    将接受任何内容,直到
    \n

  • 30
    将字符数的长度限制为最多30个。
  • 初始
    空格(“”)
    将消耗stdin流中已有的任何
    \n
    。(可选&我尚未验证)
  • &最后,
    %*c
    将使用输入字符串后按下的
    \n

  • 我想,
    scanf(“%30[^\n]%*[^\n]%*c”,字符串)
    是一个很好的选择,可以丢弃输入的剩余字符(30后)。然而,这是完全未经证实的。只是添加了一个可能的想法。使用前测试。:-)

    第一:永远不要使用
    获取
    ;它非常危险(因此已从语言中删除)。第二:你能提供更多关于发生了什么和你期望发生什么的细节吗?我想存储字符串,比如“我的名字是马里奥”,我想包括空格。然后会发生什么
    获取和
    fgets
    (urgh)和
    fgets
    读取空格没有问题,因此您的问题一定是其他问题。是的fgets正在从文件中读取。。。但是我想在我的应用程序中输入一些字符串,并将其存储在文件
    fgets(string,sizeof string,stdin)中从标准输入中读取一行或最多199个字符(一个用于0-终止符),并将其存储在
    字符串中。然后,您可以使用
    fprintf(文件指针“%s”,字符串)将其写入文件。如果这样做,问题是什么?第一:永远不要使用
    get
    ;它非常危险(因此已从语言中删除)。第二:你能提供更多关于发生了什么和你期望发生什么的细节吗?我想存储字符串,比如“我的名字是马里奥”,我想包括空格。然后会发生什么
    获取和
    fgets
    (urgh)和
    fgets
    读取空格没有问题,因此您的问题一定是其他问题。是的fgets正在从文件中读取。。。但是我想在我的应用程序中输入一些字符串,并将其存储在文件
    fgets(string,sizeof string,stdin)中从标准输入中读取一行或最多199个字符(一个用于0-终止符),并将其存储在
    字符串中。然后,您可以使用
    fprintf(文件指针“%s”,字符串)将其写入文件。如果这样做,问题出在哪里?更具体地说,如果您总是希望得到整行,但仍然希望从中得到int等,那么使用fgets读取一行,并使用sscanf解析它。此外,不仅scanf,getchar(在问题代码中使用)也可能有问题。更具体地说,如果您总是希望得到整行,但仍然希望从中获取int等,那么使用fgets读取一行,并使用sscanf解析它。不仅scanf,getchar(在问题代码中使用)也可能有问题。+1这与一般建议“不要混合(f)get和scanf”——如果您在其他地方使用scanf,也可以在这里使用scanf。+1这与一般建议“不要混合(f)get和scanf”——如果您在其他地方使用scanf,也可以在这里使用scanf。