从空格字符input读取string?
我使用Ubuntu,我也使用Geany和CodeBlock作为我的IDE。 我想要做的是读一个string(如"Barack Obama"
),并把它放在一个variables:
#include <stdio.h> int main(void) { char name[100]; printf("Enter your name: "); scanf("%s", name); printf("Your Name is: %s", name); return 0; }
输出:
Enter your name: Barack Obama Your Name is: Barack
我怎样才能让程序读取全名?
使用:
fgets (name, 100, stdin);
100
是缓冲区的最大长度。 你应该根据你的需要调整它。
使用:
scanf ("%[^\n]%*c", name);
[]
是扫描字符。 [^\n]
表示input不是换行符( '\n'
)input。 然后用%*c
从input缓冲区(不读取)读取换行符, *
表示这个读入input被丢弃(分配抑制),因为你不需要它,这个换行符在缓冲区不会为您可能采取的下一个input创build任何问题。
在这里阅读关于扫描集和分配抑制操作符。
注意你也可以使用gets
但是….
永远不要使用
gets()
。 因为事先不知道数据是不可能知道get()将读取多less个字符的,并且由于gets()
将继续存储超过缓冲区末尾的字符,所以使用是非常危险的。 它已被用来破坏计算机安全。 使用fgets()
来代替。
尝试这个:
scanf("%[^\n]s",name);
\n
只是设置扫描string的分隔符。
下面是一个如何使用fgets
函数获取包含空格的input的例子。
#include <stdio.h> int main() { char name[100]; printf("Enter your name: "); fgets(name, 100, stdin); printf("Your Name is: %s", name); return 0; }
scanf(" %[^\t\n]s",&str);
str
是你从中获取string的variables。
"%s"
将读取input,直到达到空格。
如果要读取一行(即,包括空格在内的所有字符,直到换行符到达), 获取可能是一个开始的好地方。
#include<stdio.h> int main() { char name[100]; printf("Enter your name: "); scanf("%[^\n]s",name); printf("Your Name is: %s",name); return 0; }
注意:在使用fgets()时,当您在CLI(命令行解释器)中使用fgets()作为小input时,数组中的最后一个字符将是'\ n',因为您使用“Enter”结束string。 所以当你打印string的时候,编译器总是会在打印string的时候去下一行。 如果你想要input的string具有null结尾的string行为,使用这个简单的黑客。
#include<stdio.h> int main() { int i,size; char a[100]; fgets(a,100,stdin);; size = strlen(a); a[size-1]='\0'; return 0; }
更新:在其他用户的帮助下更新。
“奥巴马”在“巴拉克”和“奥巴马”之间有一个空间。 为了适应这一点,使用这个代码;
#include <stdio.h> int main() { printf("Enter your name\n"); char a[80]; gets(a); printf("Your name is %s\n", a); return 0; }
使用此代码,您可以input,直到按下键盘input。
char ch[100]; int i; for (i = 0; ch[i] != '\n'; i++) { scanf("%c ", &ch[i]); }
正确的答案是这样的:
#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;
}
%之前的空格是非常重要的,因为如果你在程序中有另外几个scanf,比如说你有一个整数值的scanf和另一个有double值的scanf …当你到达你的char的scanf时(string名称)该命令将被跳过,你不能input它的价值…但如果你把这个空间在%前将是好的一切,而不是跳过什么。
scanf("%s",name);
使用&
scanf
input