从输入中读取具有已定义字符数的字符串

时间:2015-08-17 09:41:04

标签: c string scanf

所以我试图从输入中读取一定数量的字符。让我们说我想要读取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,则会重写内存的某些部分。

2 个答案:

答案 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个字符。那么,你就是。