GETS-C对我不起作用
在char变量中插入字符串时遇到问题。当我把它投入运行时,问题出现了。当我调试程序时,它显示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缓
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。