从空格字符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); 

使用& scanfinput