0

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

2 回答 2

3

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

  1. [^\n]将接受任何东西直到\n
  2. 30将字符数的长度限制为最大 30。
  3. initialspace(' ')将消耗任何\n已经在标准输入流中的内容。(可选且我尚未验证)
  4. & 最后,输入字符串后%*c会消耗pressed。\n

我认为,scanf(" %30[^\n]%*[^\n]%*c",string);丢弃输入的剩余字符(30 个之后)是一个不错的选择。然而,这是完全未经证实的。只是作为一个可能的想法添加。使用前进行测试。:-)

于 2012-12-14T19:05:29.420 回答
1

stdio 缓冲区中有一个换行符(由之前的一些保留scanf),因此gets立即感到满意。

没有简单的方法可以解决它,但您可以尝试在以下之前丢弃输入fgets

while((c = getchar()) != '\n' && c != EOF)
    /* discard the character */;

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


使用fgets而不是gets.

于 2012-12-14T18:44:09.630 回答