GETS - C不适合我

时间:2012-12-14 18:39:22

标签: c function printf gets

我在将字符串插入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;
}

2 个答案:

答案 0 :(得分:3)

使用scanf(" %30[^\n]%*c",string);

  1. [^\n]会接受\n
  2. 之前的所有内容
  3. 30会将字符数限制为最多30个。
  4. initial space(' ')将使用stdin流中已有的任何\n。 (可选&我还没有验证)
  5. &安培;最后,%*c将在输入字符串后按下\n
  6. 我认为,scanf(" %30[^\n]%*[^\n]%*c",string);是一个很好的选择,可以丢弃输入的剩余字符(30后)。然而,这是完全未经证实的。只是添加了一个可能的想法。使用前测试。 : - )

答案 1 :(得分:1)

stdio缓冲区中有一个换行符(之前的某些scanf留下了这个换行符),因此gets会立即得到满足。

没有简单的方法可以修复它,但您可以尝试在fgets

之前放弃输入
while((c = getchar()) != '\n' && c != EOF)
    /* discard the character */;

真正的解决方案是避免混合scanffgets


使用fgets代替gets