4

我正在尝试记录用户的响应(使用getchar())。我在'\n'插入缓冲区时遇到问题。如果我使用fgets(char* buf, .. , ..),'\n'再次进入buf,您必须'\n'在测试字符串的末尾包含。使用 string.h 函数时(如strcmp())。是否有任何干净的方法可以为此目的编写代码。

    #include<stdio.h>
    #include<string.h>
    int main()
    {
    char buf[100];
    fgets(buf, 3, stdin);
    puts(buf);
    int i = strcmp("p\n", buf);
    printf("%d", i);
    //if (!strcmp("CLock to random\n", buf))
    //{
    //puts("sucess");
    //}
    char c;
    c = getchar();
    putchar(c);
    return 0;
    }

现在我想记录响应(单个字符'p')。如果我使用 getchar() 代替 fgets(),程序会跳过第二个 getchar()(c = '\n')。如果我使用当前代码,我每次都必须在 strcmp() 中包含 \n 。

4

2 回答 2

3

如果要丢弃\n

char buf[0x1000];
fgets(buf, sizeof(buf), stdin);
char *p = strchr(buf, '\n');
if (p) *p = 0;
于 2013-04-07T06:23:34.143 回答
2
#include <stdio.h>
#include <string.h>

char* chomp(char* str){
    size_t len = strlen(str);
    if(len>0 && str[len-1] == '\n')
        str[len-1] = '\0';
    return str;
}

int main(void){
    char buf[128];

    fgets(buf, sizeof(buf), stdin);
    printf("<%s>\n", buf);  //include newline
    printf("<%s>\n", chomp(buf));//drop tail newline
    printf("<%s>\n", chomp(buf));//NC

   return 0;
}
于 2013-04-07T06:32:32.490 回答