c语言中,使用scanf输入一句话,中间有空格,怎样用printf将这句话打印出来

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言中,使用scanf输入一句话,中间有空格,怎样用printf将这句话打印出来相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
int main()

char a[50];
int i=0;
scanf("%c",&a[i]);
while(a[i] != '\n')

i++;
scanf("%c",&a[i]);

for( int j=0;j<i;j++)
printf("%c",a[j]);
return 0;

直接scanf("%s",a);
scanf会遇到空格就结束输入了 所以用在用字符串时gets好些
参考技术A 直接Printf不就行了吗追问

就是不行,只能打印第一个单词

追答

能不能把程序段发过来。。。。。。。

追问

char ch [120];
scanf("%s",&ch);
printf(“%s”,ch);
输入I can do anything.它只能打印出I

追答

scanf遇到(所有)空白字符,就默认输入截至,如回车,换行,空格这类字符都会截至,,你所输入的字符串中,i后有空格,所以,直到你输入回车后,才输出,包括C++中的cin>>也是这样
以下是我修改后的:
#include
void main()

char *ch;
ch=(char*)malloc(120);
gets(ch);
puts(ch);
return ;

参考技术B #include<string.h>
#include<stdio.h>

int main()

char str[10];

gets(s);//对于字符串的输入,通常是用gets()函数来解决的...scanf遇到空格 tab 这些就断开字符 //串了..

puts(s);//相当于printf("%s",s);

return 0;

追问

为什么第一个单词又没有了

追答

给个截图哈

追问

不好意思,现在我用的是手机,发不起

本回答被提问者采纳

怎么用C语言的scanf实现一次输入若干个数据

例如
#include<stdio.h>
int main()

scanf("%d %d ……%d")
这中间我不确定要输入多少个数,可以实现么?
……
……
……
……
谢谢了!~~

根据需要一般选择如下3种方法:

1,已知数量,且个数较少:

scanf("%d%d%d",&a&b&c);

2,已知数量,但数量较多:

for(int i=0;i<n;i++)

scanf("%d",&a[i]);

3,不知道数量

int i=0;

while(scanf("%d",&a[i]))

i++;

扩展资料:

scanf输入指南:

(1)在高版本的 Visual Studio 编译器中,scanf 被认为是不安全的,被弃用,应当使用scanf_s代替 scanf。

(2) 对于字符串数组或字符串指针变量,由于数组名可以转换为数组和指针变量名本身就是地址,因此使用scanf()函数时,不需要在它们前面加上"&"操作符。

(3) 可以在格式化字符串中的"%"各格式化规定符之间加入一个整数,表示任何读操作中的最大位数。

(4) scanf函数中没有类似printf的精度控制。

如: scanf("%5.2f",&a); 是非法的。不能企图用此语句输入小数为2位的实数。

(5) scanf中要求给出变量地址,如给出变量名则会出错

如 scanf("%d",a);是非法的,应改为scanf("%d",&a);才是合法的。

(6) 在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔,则可用空格,TAB或回车作间隔。

C编译在碰到空格,TAB,回车或非法数据(如对“%d”输入“12A”时,A即为非法数据)时即认为该数据结束。

(7) 在输入字符数据(%c)时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。

参考技术A

这里我们先建一个固定长度的数组,如下图,数组长度为1000

然后就需要用到循环了,并且设置一个按键“回车键”跳出循环。

这样,不断循环就可以不断地将数字存进数组里。当我们按回车键的时候就会跳出循环,结束输入。而输入的数据就会保存在num数组之中,唯一的缺点就是数组长度是固定的。

扩展资料:

在实际的编程中,往往会发生这种情况,即所需的内存空间取决于实际输入的数据,而无法预先确定。对于这种问题,用静态数组的办法很难解决。

为了解决上述问题,C语言提供了一些内存管理函数,这些内存管理函数结合指针可以按需要动态地分配内存空间,来构建动态数组,也可把不再使用的空间回收待用,为有效地利用内存资源提供了手段。

动态数组是指在声明时没有确定数组大小的数组,即忽略方括号中的下标;当要用它时,可随时用ReDim语句(C语言中用malloc语句)重新指出数组的大小。使用动态数组的优点是可以根据用户需要,有效利用存储空间。

对于静态数组,其创建非常方便,使用完也无需释放,要引用也简单,但是创建后无法改变其大小是其致命弱点!

对于动态数组,其创建麻烦,使用完必须由程序员自己释放,否则严重会引起内存泄露。但其使用非常灵活,能根据程序需要动态分配大小。

因此,利用动态数组就可以避免静态数组的长度不够,内存溢出等问题,换言之,可以更灵活的存储数组,这样就可以根据输入多少个数,创建多大的数组进行存储。

参考技术B scanf 执行时,如果没有数值拍入,它会一直等待,所以有不确定个数的数输入时必需有个约定,就是 何时输入结束,例如,当你拍入 字母 时 结束:
#include<stdio.h>
#include<stdlib.h>
int main()

int x[1000],i=0,j;
while (1)
j = scanf("%d",&x[i]);
if (j!=1)break; // 当你拍入 1个字母 或 符号时结束
i++;

for (j=0;j<i;j++)printf("%d ",x[j]);
getch();

也可以约定数值为 例如 -9999 结束。if (x[i]== -9999)break;
============
别的方法:如果是输入一行数据,你可以用 gets(), 把一行数据放在长字符串里,然后统计里面含的数的个数,用sscanf 从字符串里 读出。本回答被提问者采纳
参考技术C

根据需要一般选择如下3种方法:

1.已知数量,且个数较少:

scanf("%d%d%d",&a&b&c);

2.已知数量,但数量较多:

for(int i=0;i<n;i++)
scanf("%d",&a[i]);

3.不知道数量

int i=0;
while(scanf("%d",&a[i]))

i++;

参考技术D 不可以随便就写%d %d
scanf()函数里必须有 &字符名 来接受你输入的数
你可以用一个循环
int a[]; //定义一个数组用来盛放你要输入的数
for(int i=1;i<=j;i++) // 这里的j必须有范围,否则造成死循环
scanf("%d",a[i]);
根据你自己的需要,对j的值做一个限定。就可以循环输入数字了

以上是关于c语言中,使用scanf输入一句话,中间有空格,怎样用printf将这句话打印出来的主要内容,如果未能解决你的问题,请参考以下文章

c语言如何输出有空格的字符串

c语言,怎样输出有空格的字符串?

C语言中输入字符串,里面有空格,怎么根据空格把字符串分开,并存在数组里?

scanf用法

53 再谈字符串

C语言用如何用scanf输入带有空格的字符串