我在将字符串插入char变量时遇到问题。当我将其付诸实践时出现问题。当我调试我的程序时,它显示printf
,但它会滑动gets
这是我的代码:
int uloz(SPRAVA *p){
char string[200];
printf("Your message here: ");
gets(string);
printf("You have entered: %s", string);
getchar();
return 0;
}
答案 0 :(得分:3)
使用scanf(" %30[^\n]%*c",string);
[^\n]
会接受\n
。30
会将字符数限制为最多30个。space(' ')
将使用stdin流中已有的任何\n
。 (可选&我还没有验证)%*c
将在输入字符串后按下\n
。我认为,scanf(" %30[^\n]%*[^\n]%*c",string);
是一个很好的选择,可以丢弃输入的剩余字符(30后)。然而,这是完全未经证实的。只是添加了一个可能的想法。使用前测试。 : - )
答案 1 :(得分:1)
stdio缓冲区中有一个换行符(之前的某些scanf
留下了这个换行符),因此gets
会立即得到满足。
没有简单的方法可以修复它,但您可以尝试在fgets
:
while((c = getchar()) != '\n' && c != EOF)
/* discard the character */;
真正的解决方案是避免混合scanf
和fgets
。
使用fgets
代替gets
。