gpt4 book ai didi

C 程序读取和存储字符串

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

我正在用 C 语言编写一段代码,该代码会迭代 T 次,每次都会将一首小歌曲​​的文本作为输入,并在其中执行一些计数操作(计算每个单词的长度)。现在我只是测试输入是否有效,但没有。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_SONG_SIZE 501

int main(void){
int T;
scanf("%d", &T);
while(T--){
char* song = malloc(MAX_SONG_SIZE);
if(song == NULL){
printf("malloc failed");
return 1;
}
fgets(song, MAX_SONG_SIZE, stdin);
printf("foo\n");
free(song);
}
return 0;
}

我使用fgets()是因为单词之间有空格,并且动态内存分配是因为我不能只对所有歌曲使用一个数组,上一次迭代中的字符将保留在数组中。

但是有一个问题。它在第一次迭代中跳过 fgets(),只写入“foo”,而不等待我插入字符串。

这是如何使用初始输入“3”进行打印的示例:
3

这是一个测试

另一个测试
foo

<小时/>

替换 printf("foo\n");printf("<<%s>>\n", song);输出是这样的:

3<br>
<< <br>
>> <br>
test <br>
<<test <br>
>> <br>
another test <br>
<<another test <br>
>> <br>

如何解决这个问题?如果您有任何建议,欢迎您。

最佳答案

输入缓冲区中还剩下一个\n,请参见http://c-faq.com/stdio/scanfinterlace.html

引用链接:

As a general rule, you shouldn't try to interlace calls to scanf with calls to gets() (or any other input routines); scanf's peculiar treatment of newlines almost always leads to trouble. Either use scanf to read everything or nothing.

关于C 程序读取和存储字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30263347/

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