所以我试图从输入中读取一定数量的字符。让我们说我想要读取30个字符并将它们放入字符串中。我设法用 for循环来做这件事,我清理了缓冲区,如下所示。
for(i=0;i<30;i++){
string[i]=getchar();
}
string[30]='\0';
while(c!='\n'){
c=getchar(); // c is some defined variable type char
}
这对我有用,但我想知道是否有另一种方法可以做到这一点。我正在研究,其中一些人正在使用sprintf()
来解决这个问题,但我并不了解这个解决方案。然后我发现您可以将scanf
与%s
一起使用。当他们想要阅读3个字符时,其中一些人使用%3s
。我自己尝试了这个,但是这个命令只读取字符串直到第一个空格。这是我使用的代码:
scanf("%30s",string);
当我用这一行运行我的程序时,如果我写一下:&#34;今天是美好的一天。下雨了,但是我喜欢下雨了。&#34;我以为前30个字符会被保存到字符串中。但是当我尝试用puts(string);
读取这个字符串时,它只显示&#34;今天&#34;。
如果我使用scanf("%s",string)
或gets(string)
,如果输入的字符数大于30,则会重写内存的某些部分。
答案 0 :(得分:1)
您正在寻找的API是fgets()
。手册页描述了
char *fgets(char *s, int size, FILE *stream);
fgets()
最多从size
读取一个少于stream
个字符的字符,并将它们存储到s
指向的缓冲区中。阅读在EOF
或换行符后停止。如果读取换行符,则将其存储到缓冲区中。终止空字节('\0'
)存储在缓冲区中的最后一个字符之后。
答案 1 :(得分:1)
您可以使用scanf("%30[^\n]",s)
实际上,这是你可以设置输入哪些字符的方法。这里,克拉符号'^'
表示negation
,即。这将输入除\n
以外的所有字符。 %30
要求输入30个字符。那么,你就是。