有没有办法丢弃'\ n'?

时间:2013-04-07 06:17:31

标签: c string buffer

我正在尝试记录用户的响应(使用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。

2 个答案:

答案 0 :(得分:3)

如果您要放弃\n

char buf[0x1000];
fgets(buf, sizeof(buf), stdin);
char *p = strchr(buf, '\n');
if (p) *p = 0;

答案 1 :(得分: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;
}