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

标签 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);

当我用这行代码运行程序时,如果我写:“今天是美好的一天。正在下雨,但没关系,我喜欢下雨。”我认为前 30 个字符将被保存到字符串中。但是当我尝试使用 puts(string); 读取此字符串时,它只显示“Today”。

如果我使用 scanf("%s",string)gets(string) 如果输入的字符数为大于 30。

最佳答案

您可以使用scanf("%30[^\n]",s)
实际上,这就是您如何设置要输入的字符。这里,克拉符号'^'表示否定,即。这将输入除 \n 之外的所有字符。 %30 要求输入 30 个字符。所以,你来了。

关于c - 从输入中读取具有定义字符数的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32047175/

相关文章:

python - 交换两个字符串之间的单词但保留其他字符

C - 如何从一个字符串中提取不同的列?

c - Erlang NIF 和线程的问题

c - 读取 FILE 时 sscanf 中的段错误

c - 警告 : control reaches end of non-void function [-Wreturn-type] }

c++ - 编写 tcp 服务器——缓冲流

c -\n 如何影响 scanf 中的字符串扫描?

c - scanf 不断被跳过

c - 函数原型(prototype)错误,应为 '=' ... 在 'int' 之前

c - 简单的 pic10f204 C 编程