gpt4 book ai didi

c - Fget 读取字符串后自动\n

转载 作者:行者123 更新时间:2023-11-30 15:14:08 25 4
gpt4 key购买 nike

我遇到了一个非常奇怪的问题。使用 fgets 读取/键入字符串指针后,下次我想从键盘读取新字符串时,第一个字符自动变为\n。我怎样才能避免/覆盖它?我尝试过使用

if (firstString[strlen(firstString) - 1] == '\n')
firstString[strlen(firstString) - 1 ] = 0;

但它仍然不起作用。感谢帮助。这是我的代码:

void citire_text (char *text , int numar_linii)
{
char *text_linie;
int i;

for(i=0;i<=numar_linii;i++)
{
char *text_linie;
text_linie = malloc(MAX*sizeof(char));
fgets(text_linie,MAX,stdin);
strcat(text,text_linie);

}
if (text[strlen(text) - 1] == '\n')
text[strlen(text) - 1 ] = 0;

}

void citire_operatie (char *operatie)
{

fgets(operatie,MAX+2,stdin);
printf("%d",*operatie);
if ((*operatie)=='\n')
printf("YES");
else

printf("NO\n");




}
int main(void)
{
char *text,*operatii;
int numarDeLinii,i;
scanf("%d",&numarDeLinii);
text = malloc(MAX*numarDeLinii*sizeof(char));
operatii = malloc((MAX+2)*sizeof(char));
citire_text(text,numarDeLinii);
int numar_operatii;
scanf("%d",&numar_operatii);
for(i = 1;i<= numar_operatii;i++)
citire_operatie(operatii);
return 0;
}

如果我将“numar_operatii”设置为 1 ,则子程序中的 citire_operatie fgets 甚至不会被调用。

最佳答案

最好不要将 scanf() 函数与 fgets() 混合使用。读取代码时留下 '\n' scanf("%d", ...

而不是

 scanf("%d",&numarDeLinii);

使用fgets()读取

char buf[80];
if (fgets(buf, sizeof buf, stdin) == NULL) Handle_EOF();
if (sscanf(buf, scanf("%d",&numarDeLinii) != 1) Handle_Nonnumeric_Input();

或者创建一个简单的辅助函数来读取int。像这样的东西:

int Read_int(FILE *istream, const char * prompt, int *dest)  {
char buf[80];
while (fgets(buffer, sizeof buffer, stdin)) {
fputs(prompt, stdout);
fflush(stdout);
if (sscanf(buffer, "%d", dest) == 1) return 1;
}
return EOF;
}

// Usage
if (Read_int(stdin, "Enter lines", &numarDeLinii) != 1) return FAIL;
if (Read_int(stdin, "Enter operations", &numar_operatii) != 1) return FAIL;

关于c - Fget 读取字符串后自动\n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34165336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com