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