精华内容
下载资源
问答
  • 要输入带空格的字符串,要用到一个格式字符:%[] --> 一个字符集。“%[]”的作用是扫描字符集合:例如:scanf(“%[^\n]”,str);具体作用是:如果输入的字符属于方括号内字符串中某个字符,那么就提取该字符;如果...

    要输入带空格的字符串,要用到一个格式字符:%[] --> 一个字符集。

    “%[]”的作用是扫描字符集合:

    例如:scanf(“%[^\n]”,str);

    具体作用是:如果输入的字符属于方括号内字符串中某个字符,那么就提取该字符;如果一经发现不属于就结束提取。该方法会自动加上一个'\0'到已经提取的字符后面。

    #include

    int main()

    {

    char str[81];

    printf("Please input a string:\n");

    scanf("%[^\n]",&str);

    printf("The string is:\n%s\n",str);

    return 0;

    }

    6917656d50b779dd19e9fa9e674c493d.png

    扩展资料:

    字符串函数应用:

    1. 连接运算 concat(s1,s2,s3…sn) 相当于s1+s2+s3+…+sn。

    例:concat(‘11’,'aa’)='11aa’。

    2. 求子串。 Copy(s,I,I) 从字符串s中截取第I个字符开始后的长度为l的子串。

    例:copy(‘abdag’,2,3)=’bda’。

    3. 删除子串。过程 Delete(s,I,l) 从字符串s中删除第I个字符开始后的长度为l的子串。

    例:s:=’abcde’;delete(s,2,3);结果s:=’ae’。

    4. 插入子串。 过程Insert(s1,s2,I) 把s1插入到s2的第I个位置。

    例:s:=abc;insert(‘12’,s,2);结果s:=’a12bc’。

    5. 求字符串长度 length(s) 例:length(‘12abc’)=5。

    在ASP中 求字符串长度用 len(s)例: len("abc12")=5。

    参考资料:

    百度百科-扫描集

    展开全文
  • scanf函数使用空白(换行符,制表符,空格)把输入分为多个字段,在依次把转换说明和字段匹配时跳过字符,首先你要知道什么是转换说明(%d,%f等),但唯一例外的是%c,根据%c,scanf读取每一个字符,包括空白。...

    scanf函数使用空白(换行符,制表符,空格)把输入分为多个字段,在依次把转换说明和字段匹配时跳过字符,首先你要知道什么是转换说明(%d,%f等),但唯一例外的是%c,根据%c,scanf会读取每一个字符,包括空白。
    换句话说,除了%c模式,scanf在读取输入时会跳过非空白字符前的所有字符,然后一直读取字符,直到遇到空白字符或与正在读取的字符不匹配的字符,(转换说明符与其所对应的参数数据类型不一样)。具体可参考书籍《C Primer Plus 中文版》(第六版)。P92 P98.
    下面看几个例子:

    例子一:

    #include<stdio.h>
    int main()
    {
        char M,N;
    
        scanf("%c %c",&M,&N);//%c之前加空格与不加空格之间的区别
        printf("%c%c",M,N)return 0;
    }
    
    a						b	//输入a				b,则正确读入a与b,scanf中两个%c之间的空格起到了在scanf读取时帮助其跳过空格的作用,关于在输入时%c前面加空格的作用我的另一篇文章已介绍过,若scanf中的两个%c之间没有空格则输出a加上一个空格
    ab
    Process returned 0 (0x0)   execution time : 5.467 s
    Press any key to continue.
    
    

    而对于其他的转换说明符则没有此作用,即转换说明符%c前面加上空格会对数据的读入造成影响,而其他的转换说明符则不会,因此
    scanf("%d%d",&n,&m)与scanf("%d %d",&n,&m)的行为相同,
    scanf("%c%c"&n,&m)与scanf("%c %c",&n,&m)的行为不同,如果%c前面加一个空格,scanf在读取输入的数据时便会跳过输入的空格,从第一个非空白字符开始读取,也就是说,scanf("%c",&ch)从输入的第一个字符开始读取,而scanf(" %c",&ch)则从第一个非空白字符开始读取。
    例二:

    #include<stdio.h>
    int main()
    {
        int a,b;
    
        scanf("%d%d",&a,&b);
        printf("%d%d",a,b);
    
        return 0;
    }
    
    1                       2//scanf在读取输入时会跳过非空白字符前的所有字符
    12
    Process returned 0 (0x0)   execution time : 5.705 s
    Press any key to continue.
    
    

    例三:

    #include<stdio.h>
    int main()
    {
       char name[20],xing[20];
       scanf("%s%s",name,xing);
       printf("%s %s",name,xing);
       return 0;
    }
    
    tom             you//scanf在读取输入时会跳过非空白字符前的所有字符
    tom you
    Process returned 0 (0x0)   execution time : 10.425 s
    Press any key to continue.
    
    

    例子四:

    #include<stdio.h>
    int main()
    {
        char name[20],xing[20];
    
    
        printf("请输入你的名字与姓\n");
        scanf("%s",name);//这里不要与转换说明符%s的读取规则弄混了了,根据%s转换说明,scanf只会读取字符串中的一个单词
        scanf("%s",xing);
        printf("%s,%s\n",name,xing);
       // printf("%s",name);
    
    
        return 0;
    }
    
    请输入你的名字与姓
    ZhenKun         Wang//scanf在读取输入时会跳过非空白字符前的所有字符
    ZhenKun,Wang
    
    Process returned 0 (0x0)   execution time : 30.047 s
    Press any key to continue.
    
    

    实践是检验的真理!敲一遍就会了。
    如有错误欢迎留言指正

    展开全文
  • #include<stdio.h> #include<iostream> #include<algorithm> #include<string.h> using namespace std; #define ll long long ... scanf("%[^\n]%*c", str1);... scanf("%[^\n]", st
    #include<stdio.h>
    #include<iostream>
    #include<algorithm>
    #include<string.h>
    using namespace std;
    #define ll long long
    char str1[100];
    char str2[100];
    int main()
    {
    	scanf("%[^\n]%*c", str1);
    	printf("%s\n", str1);
    	scanf("%[^\n]", str2);
    	printf("%s\n", str2);
    	return 0;
    }
    

    注意如果读取第一个字符串str1的时候没有加%*c 则当程序输入一个字符串后,按下回车,scanf遇到回车停止输入,然后打印第一个字符串,然后这时候回车还是在缓冲区里的,当要输入第二个字符串的时候,直接就碰到了回车 就直接停止输入了,所以要在输入第一个字符串后面加上%*c表示再读入一个字符串并把它抛弃,也就是缓冲区里的回车符被抛弃了

    关于fscanf的问题
    设txt文件内容为
    在这里插入图片描述

    printf("fp指针位置:%d\n", ftell(fp));
    
    fscanf(fp, "%[^\n]", str1);
    printf("fp指针位置:%d\n", ftell(fp));
    printf("%s\n", str1);
    /*
    printf("str1:\n");
    for (int i = 0; i < (int)strlen(str1); i++)
    {
    	printf("%d ", str1[i]);
    }
    
    printf("\n");
    */
    fscanf(fp, "%[^\n]", str2);
    printf("%s\n", str2);
    

    结果为
    在这里插入图片描述
    字符d的位置是10,可知当fp指针碰到回车符的时候就不动了,和上面的scanf一样,但当程序为

    printf("fp指针位置:%d\n", ftell(fp));
    
    fscanf(fp, "%[^\n]%*c", str1);
    printf("fp指针位置:%d\n", ftell(fp));
    printf("%s\n", str1);
    /*
    printf("str1:\n");
    for (int i = 0; i < (int)strlen(str1); i++)
    {
    	printf("%d ", str1[i]);
    }
    
    printf("\n");
    */
    fscanf(fp, "%[^\n]", str2);
    printf("%s\n", str2);
    

    程序结果为
    在这里插入图片描述
    程序可以正常读取两个hello world但是fp指针由原来的11变成了13
    这是由于“回车换行”在txt文件中的表示为0x0D 0x0A
    在这里插入图片描述
    可以看到0D 0A的位置分别是11 12 当加上%*c后,fp指针读取回车换行 但是把它丢弃后,指向0A的下一个字符 也就是13

    但用fgetc读取文件时

    在这里插入图片描述

    可见OD 被fgetc给忽略了,只返回0A

    展开全文
  • scanf( )读取空格

    千次阅读 2018-09-27 19:21:30
    #include &lt;stdio.h&gt; int main() { int ch; char name[32] = {0}; while(1) { scanf("%[^\n]"... // 读取除 '\n' 外的所有字符 scanf("%*c"); // 清空 '\n' ...
  • 代码 #include <Windows.h> #include <cstdio> int main() { char readBuf[128]; char a; for (int i = 0; i < 5; i++) { memset(readBuf, 0, 128);... // scanf_s("%[^\n]%*c", readBuf, 127);
  • 1、使用gets()遇到空格不会终止从缓冲区中读取数据 2、scanf(“%[^\n]”,str); ^\n 表示非\n 当遇到非\n的字符时就读入
  • scanf空格读取

    2021-02-20 00:25:41
    只有%c能读取空格字符,其他占位符豆浆空格作为结束判断标志。 %d以空格作为结束标志,%c读到空格字符,%s以第二个空格字符作为结束标志。
  • [^\n]的意思是读取到\n停止,当然也可以\n换成其他符号, %*c的意思是读入一个回车,这样就不用清空输入缓冲区了, 否则如果不加%*c继续使用scanf的话就会直接读取缓冲区里的东西,需要使用fflush(stdin)清空缓冲区...
  • gets()函数也能实现获取一个带空格字符串的操作,但在Linux系统下使用该函数会得到一个警告:warning: the `gets’ function is dangerous and should not be used,原因在于Linux下gcc编译器不支持gets()函数,可以...
  • scanf通过%s读取字符串时,当遇到空格之后,就会匹配结束,这样无法将一行带...gets会读取空格,且gets函数遇到\n后,不会存储\n,而是将其翻译为空字符’\0’ puts函数的格式如下: char *puts(char *str) 函数pu...
  • #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> int main(int argc, char** argv) { int a, b;... scanf("%d %d", &a, &b);

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,897
精华内容 6,758
关键字:

scanf可以读取空格吗