C语言 请问scanf输入遇到空格自动断行怎么办?

新手求教
char name[30];
scanf("%s",name);
这个样子,但是运行程序的时候从一个txt中读取命令
aa bb
这个样子,希望的是 name中存储'aa bb',但是似乎读完aa到了空格就结束了
请问为什么

第1个回答  2015-10-28
如果每行是固定格式的话可以用fscanf函数
比如TXT中一行为: aa bb cc
fscanf(fp , "%s %s %s" , a , b , c);//fp为文件指针, a,b,b为char数组
第2个回答  2015-10-28
改用gets输入吧,scanf不能接收含空格的字符串追问

但是 我有不同的内容要分开输入怎么办?
我的意思是
struct{
char a[30];

char b[30];

]
然后我要输入内容分别存储进a和b,如果用gets的话是不是只能得到后面一个?

追答

你要这样的话只能用 变量.成员 来做参数,比如
struct{
char *a;
char *b;
] s;
你只能gets(s.a);或gets(s.b);

要不然就scanf("%s%s",s.a,s.b);,这样的话输入aa bb,就可以同时赋给两个成员了(空格起分隔作用)

追问

我的意思是 我要把 aa bb赋值给a 然后 cd cd 赋值给b这样 scanf的话会在空格断开 get的话第一次赋值总是不成功

追答

这种情况你不能用scanf
两个gets要分开
先输入aa bb 按回车
然后输入cd cd

追问

每次都清掉缓存之后似乎好了,再请问一下 我的a限定了宽度30, 如果txt文件里某一行的内容超过了30,那么多出来的那一部分是会被无视掉还是会算到下一个gets里面啊?如果会算到下一个里,怎么设置才能让他被无视掉呢?

追答

可以肯定超出来的部分不会被无视,而是会写在a+30这个地址之后,也不会算到下一个gets
实际上C的数组长度没有任何意义,没有什么下标越界的规定,数组的实质就是一个指针

本回答被提问者采纳
第3个回答  2015-10-28
 scanf("%[^\n]",name);

这里的意思是scanf会吃掉除了回车之外的所有字符,也就是说回车它也会当场一个字符存储进你的字符串里面

第4个回答  2015-10-28
可以用gets(s);

C语言 请问scanf输入遇到空格自动断行怎么办?
如果每行是固定格式的话可以用fscanf函数 比如TXT中一行为: aa bb cc fscanf(fp , "%s %s %s" , a , b , c);\/\/fp为文件指针, a,b,b为char数组

...让输入一个数之后自动换行,需要在scanf()之后怎么写?
scanf()函数就是根据你输入的换行符(你按回车键)来判断你的输入是否结束。如果你输入一个数,比如你要输入123,但你输入1是不是就自动换行。。。,所以不行

C语言,数组输入遇到问题求大神指教:哪里错了,如何改正,为什么会出现...
scanf的格式加'\\n',含义特殊,不是输入一个回车,而是输入完一个数字后,必须等待一个非空格、制表符、回车的输入,程序才会继续。所以你那样写,第一次循环输入2回车,不会进入下一次循环,而是等待再次输入,然后你输入3的时候2被存储在元素1中,进入下一个循环,已经有3了还要等待输入,于是你输入...

C语言 编译函数 输入一段字符,求其中空格的个数
1.接收有空格的字符串用gets(str);scanf遇到空格自动结束接收。2.scanf语句中,数组名就是它的地址,所以不要加&。3.两个函数中,getchar();这句是多余的。4.后一个函数中,for语句有问题(当你输入的字符中有0时会出错)。5.下面代码可以供你参考。代码一:include<stdio.h> void main(){ ...

c语言如何让输入特定数字结束输入
确定思路,可以采用循环输入遇到特定数字跳出循环,在这里while循环比较符合条件。具体语句:如:include "stdio.h"it main(){ int n,i=0,a[100]; scanf("%d",&n); while(n!=0)\/\/这里的0就是特定数字。可以随便改 { a[i++]=n;\/\/将输入的数存入数组 scanf("%d",&n...

c语言中%[]怎么用?
[]主要用来输入字符串,以控制输入的字符。如:%[123]则只输入集合123中的字符,遇到其他字符输入就结束,%[^123]表示不输入字符集123中的字符,即遇到123中的某个字符就停止输入。比如我们想用scanf实现输入一行,而一行中可能有空格,如果用scanf("%s",str);则在输入遇到空格时就停止了输入,而我们...

c语言空格输出476
正确的输入应该为:6,77707 或者改为scanf("%d%d", &x, &y);原因:scanf以空格或换行作为输入的分隔符。采用自定义的分隔符(,)时,scanf采用三者做为分隔符,也就是碰到空格或换行或逗号。当输入6 77707时,将6赋值给了x,y值并没有赋值,因为你对y没有赋初值,所以输出y时,是个随机值(...

c语言 阅读以下程序,当输入数据的形式为 25,13,10<CR> 正确的输出结果...
先说一点需要的知识 scanf:① 遇空格、“回车”、“跳格”键,结束当前输入 ② 遇宽度结束,结束当前输入 ③ 遇非法输入,结束所有输入 scanf的返回值表示输入成功的数的个数,若遇到输入意外返回EOF 你的这个程序,输入逗号是遇到非法字符,scanf结束所有输入同时返回1(因为第一个值是正确的)也就是...

c语言中商数要求保留2位小数,怎么办?
在c语言中让一个数保留2位小数可以通过精度限定符来完成,精度限定符有一个点号后跟一个整数组成。其准确含义依赖于它所修饰的数据类型。这是由printf()这个函数的输出格式决定的,“%”后面的表示格式,f表示以小数形式输出单、双精度数,在没有规定位数时默认为输出6为小数,若规定了位数,则例如:...

相似回答