%d与%d之间的空格

    科技2024-05-11  84

    记录一个小问题 #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

    Processed: 0.018, SQL: 8