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