%d与%d之间的空格

记录一个小问题
#include <stdio.h>
int main()
{
int N,i=0,t=0;
int number[1000];
int A=0,B=0,C=0,flag=1,max=0;
char s[1000];
scanf("%d “,&N);
for(i=0;i<=N-1;i++)
{
scanf(”%d",&number[i]);
}
for(t=0;t<i;t++) printf("%d “,number[t]); printf(”%d ",N);
return 0;
}

我发现一个事情: 如果写的是scanf("%d "),number[t] ,也就是%d之后有空格,那么就算N=5,也要输入六个数字才可以!!在网上一查,说是:%d后加一个空格就要输入两个数字。在书上一查,说是scanf函数使用空白字符分割输入的数据,这些空白字符包括空格、换行、制表符。
简而言之就是,scanf()把空白作为分割多个输入的标志,所以当你输入空白的时候,scanf()会认为你将要进行下一个输入,从而停下来等你。

也就是不要输入scanf("%d ")这种格式啦!!!
还以为是之前的格式错了,之前的格式是对的,可以这样写:
while(N–) {}

所幸写题 debug的时候深究了一下!!!

补充:所有输入输出函数:
①字符数组保存字符串时,容易产生超界问题eg.char str[5]; strcpy(str,“ABCDE”)。将长度为5的字符串存储在数组中,实际需要6个字节的空间,所以数组超界。(因为字符串以串结束标志"\0"作为最后一个字符,因此把一个字符串存入数组时,也同时把"\0"存入数组,并且以此最后结束标志)。
char str1[]={“ABCDE”}与char str2[]={‘A’,‘B’,‘C’,‘D’,‘E’}的长度是不同的,因为字符数组并不要求最后一个字符为’\0’;
在内存中的实际存放情况:
H e l l o \0

②while(1)循环条件表达式为1,永远为真,循环内读入一组数据时,检查是否是结束标志。
1.putchar(ch);输出一个字符,要使用putchar(’\n’)进行换行
2.ch=getchar();接收一个字符,可用来接收回车符。即应当:
ch=getchar(); //得到字符
putchar(ch);//输出字符
putchar(’\n’);//换行
getchar();//为了确认输入完毕要按Enter,所以回收。
3.gets :一次读入一行,以回车键作为结束符
scanf:遇到空格等结束。
党读入的字符串中存在空格时,要使用gets;党不存在空格时,可以使用scanf

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值