Hie*_*yen 93 c string whitespace input scanf
我正在使用Ubuntu,我也使用Geany和CodeBlock作为我的IDE.我正在尝试做的是读取一个字符串(如"Barack Obama")并将其放在一个变量中:
#include <stdio.h>
int main(void)
{
char name[100];
printf("Enter your name: ");
scanf("%s", name);
printf("Your Name is: %s", name);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
Enter your name: Barack Obama
Your Name is: Barack
Run Code Online (Sandbox Code Playgroud)
如何让程序读取整个名称?
pho*_*xis 167
使用:
fgets (name, 100, stdin);
Run Code Online (Sandbox Code Playgroud)
100是缓冲区的最大长度.您应该根据需要进行调整.
使用:
scanf ("%[^\n]%*c", name);
Run Code Online (Sandbox Code Playgroud)
这[]是扫描集字符.[^\n]告诉我,虽然输入不是换行符('\n')接受输入.然后使用%*c它从输入缓冲区中读取换行符(未读取),并*指示此读取输入被丢弃(赋值抑制),因为您不需要它,并且缓冲区中的这个换行符不会创建您可能采取的下一个输入的任何问题.
注意你也可以使用gets....
切勿使用
gets().因为在不事先知道数据的情况下不可能分辨出get()将读取多少个字符,并且因为gets()将继续存储超过缓冲区末尾的字符,所以使用它是非常危险的.它已被用来打破计算机安全.请fgets()改用.
Sri*_*yer 21
试试这个:
scanf("%[^\n]s",name);
Run Code Online (Sandbox Code Playgroud)
\n 只需设置扫描字符串的分隔符.
正确答案是这样的:
#include <stdio.h>
int main(void)
{
char name[100];
printf("Enter your name: ");
// pay attention to the space in front of the %
//that do all the trick
scanf(" %[^\n]s", name);
printf("Your Name is: %s", name);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
% 前面的空格非常重要,因为如果您的程序中还有另外几个 scanf,假设您有 1 个整数值的 scanf 和另一个具有双精度值的 scanf...当您到达 char (string) 的 scanf 时name)该命令将被跳过,您无法为其输入值...但是如果您将该空格放在 % 前面,则一切正常,不会跳过任何内容。
下面是一个如何使用该fgets函数获取包含空格的输入的示例.
#include <stdio.h>
int main()
{
char name[100];
printf("Enter your name: ");
fgets(name, 100, stdin);
printf("Your Name is: %s", name);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
小智 6
scanf(" %[^\t\n]s",&str);
Run Code Online (Sandbox Code Playgroud)
str 是从中获取字符串的变量。
| 归档时间: |
|
| 查看次数: |
498615 次 |
| 最近记录: |