导航:首页 > 净水问答 > scanf过滤哪些

scanf过滤哪些

发布时间:2021-03-27 20:44:43

Ⅰ scanf(“%d”,&choose);很简单的c语言问题。超高悬赏提问

switch(choose)
{
case1: OutputInformationByName( );break;
case2: OuputInformationByArea( );break;
case3: SearchByName( );break;
case4: SearchByArea( );break;
case5: p=MallocNode( );/*申请一个新的结点*/
InputInformation(p);/*用户输入新信息倒新结点*/
InsertOneNode(p);/*将新结点加到链表中*/
break;
case6: DeleteNode( );break;
case7: EditNode( );break;
case8: free(head);/*先释放内存空间*/
exit(1);break;
default: break;
}
你吧全部代码贴出来吧,这个里边得函数一个都没有,怎么判断?

Ⅱ 寻找一个c语言程序:从输入中过滤字符串

我也试了一下,没问题,你到底是什么问题,是要在s1或s2中输入空格吗?那么用gets函数;
gets()函数用来从标准输入设备(键盘)读取字符串直到换行符结束,但换行符会被丢弃,然后在末尾添加'\0'字符。
其调用格式为:gets(s);
其中s为字符串变量(字符串数组名或字符串指针)。
gets(s)函数与scanf("%s:",&s)/*scanf("%s",s)*/相似,但不完全相同,使用scanf("%s",&s);函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到遇到换行为止。
你改为:
#include<stdio.h>
voidmain()
{chars1[50],s2[50];
gets(s1);
gets(s2);
printf("%s\n",s1);
printf("%s\n",s2);
}
这样就用回车表示输入结束

Ⅲ C语言scanf函数过滤换行符号吗

刚刚做了下实验,事实证明scanf也不会处理'\n'的,scanf只会按格式符从缓冲区读取需要的数据,其专他的是不会动的。
比如属:
int a;

char c;

scanf("%d", &a);

c = getchar();

输入:123 回车

可以发现,getchar()函数没有阻塞等待用户输入,而此时若是按%c格式打印变量c,则会发现换行了

经过我后续的实验,也是可以证明,位于缓冲区队列首部,也就是scanf取缓冲区数据时第一个取到的是'\n',它是会无视的

暂时还没试 haiyangfenghuo 同学说的scanf()实参中带\n

Ⅳ scanf("%[^n],c)具体含义

%[^n]表示接收非n字符的字符串。
c是一段连续空间的名字,跟指针完全不一样。不过在值传递时传的是首元素地址,所以scanf("",s)这里s是首元素地址,scanf("",&s)取这段空间的首地址,同样是首元素地址。
scanf和sscanf函数对数据过滤有很多操作,可以网络下。以下sscanf的用法同样适用scanf
sscanf() - 从一个字符串中读进与指定格式相符的数据.

函数原型:

Int sscanf( string str, string fmt, mixed var1, mixed var2 ... );

int scanf( const char *format [,argument]... );

说明:

sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。

其中的format可以是一个或多个 {%[*] [width] [{h | l | I64 | L}]type | ' ' | '\t' | '\n' | 非%符号}

注:

1、 * 亦可用于格式中, (即 %*d 和 %*s) 加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中)

2、{a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。

3、width表示读取宽度。

4、{h | l | I64 | L}:参数的size,通常h表示单字节size,I表示2字节 size,L表示4字节size(double例外),l64表示8字节size。

5、type :这就很多了,就是%s,%d之类。

6、特别的:%*[width] [{h | l | I64 | L}]type 表示满足该条件的被过滤掉,不会向目标参数中写入值

支持集合操作:

%[a-z] 表示匹配a到z中任意字符,贪婪性(尽可能多的匹配)

%[aB'] 匹配a、B、'中一员,贪婪性

%[^a] 匹配非a的任意字符,贪婪性

例子:

1. 常见用法。

char buf[512] = ;

sscanf("123456 ", "%s", buf);

printf("%s\n", buf);

结果为:123456

2. 取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。

sscanf("123456 ", "%4s", buf);

printf("%s\n", buf);

结果为:1234

3. 取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。

sscanf("123456 abcdedf", "%[^ ]", buf);

printf("%s\n", buf);

结果为:123456

4. 取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。

sscanf("123456abcdedfBCDEF", "%[1-9a-z]", buf);

printf("%s\n", buf);

结果为:123456abcdedf

5. 取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。

sscanf("123456abcdedfBCDEF", "%[^A-Z]", buf);

printf("%s\n", buf);

结果为:123456abcdedf

6、给定一个字符串iios/12DDWDFF@122,获取 / 和 @ 之间的字符串,先将 "iios/"过滤掉,再将非'@'的一串内容送到buf中

sscanf("iios/12DDWDFF@122", "%*[^/]/%[^@]", buf);

printf("%s\n", buf);

结果为:12DDWDFF

7、给定一个字符串““hello, world”,仅保留world。(注意:“,”之后有一空格)

sscanf(“hello, world”, "%*s%s", buf);

printf("%s\n", buf);

结果为:world

%*s表示第一个匹配到的%s被过滤掉,即hello被过滤了

如果没有空格则结果为NULL。

sscanf的功能很类似于正则表达式, 但却没有正则表达式强大,所以如果对于比较复杂的字符串处理,建议使用正则表达式.

//-------------------------------------------------------

sscanf,表示从字符串中格式化输入

上面表示从str中,输入数字给x,就是32700

久以前,我以为c没有自己的split string函数,后来我发现了sscanf;一直以来,我以为sscanf只能以空格来界定字符串,现在我发现我错了。

sscanf是一个运行时函数,原形很简单:

int sscanf(

const char *buffer,

const char *format [,

argument ] ...

);

它强大的功能体现在对format的支持上。

我以前用它来分隔类似这样的字符串2006:03:18:

int a, b, c;

sscanf("2006:03:18", "%d:%d:%d", a, b, c);

以及2006:03:18 - 2006:04:18:

char sztime1[16] = "", sztime2[16] = "";

sscanf("2006:03:18 - 2006:04:18", "%s - %s", sztime1, sztime2);

但是后来,我需要处理2006:03:18-2006:04:18

仅仅是取消了‘-’两边的空格,却打破了%s对字符串的界定。

我需要重新设计一个函数来处理这样的情况?这并不复杂,但是,为了使所有的代码都有统一的风格,我需要改动很多地方,把已有的sscanf替换成我自己的分割函数。我以为我肯定需要这样做,并伴随着对sscanf的强烈不满而入睡;一觉醒来,发现其实不必。

format-type中有%[]这样的type field。如果读取的字符串,不是以空格来分隔的话,就可以使用%[]。

%[]类似于一个正则表达式。[a-z]表示读取a-z的所有字符,[^a-z]表示读取除a-z以外的所有字符。

所以那个问题也就迎刃而解了:

sscanf("2006:03:18 - 2006:04:18", "%[0-9,:] - %[0-9,:]", sztime1, sztime2);

在softmse (Jake) 的问题贴http://community.csdn.net/Expert/topic/4843/4843294.xml?temp=.4321558中 ,周星星给出了一个很cool的sscanf用例,而后通过学习,发现sscanf真棒,现做一总结。

原问题:

iios/12DDWDFF@122

获取/和@之间的字符串怎么做

C程序里面有什么函数吗?

周星星的代码:

#include <stdio.h>

int main()

{

const char* s = "iios/12DDWDFF@122";

char buf[20];

sscanf( s, "%*[^/]/%[^@]", buf );

printf( "%s\n", buf );

return 0;

}

结果为:12DDWDFF

sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。

函数原型:

int scanf( const char *format [,argument]... );

其中的format可以是一个或多个 {%[*] [width] [{h | l | I64 | L}]type | ' ' | '\t' | '\n' | 非%符号},

注:{a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。

width:宽度,一般可以忽略,用法如:

const char sourceStr[] = "hello, world";

char buf[10] = ;

sscanf(sourceStr, "%5s", buf); //%5s,只取5个字符

cout << buf<< endl;

结果为:hello

{h | l | I64 | L}:参数的size,通常h表示单字节size,I表示2字节 size,L表示4字节size(double例外),l64表示8字节size。

type :这就很多了,就是%s,%d之类。

特别的:

%*[width] [{h | l | I64 | L}]type 表示满足该条件的被过滤掉,不会向目标参数中写入值。如:

const char sourceStr[] = "hello, world";

char buf[10] = ;

sscanf(sourceStr, "%*s%s", buf); //%*s表示第一个匹配到的%s被过滤掉,即hello被过滤了

cout << buf<< endl;

结果为:world

支持集合操作:

%[a-z] 表示匹配a到z中任意字符,贪婪性(尽可能多的匹配)

%[aB'] 匹配a、B、'中一员,贪婪性

%[^a] 匹配非a的任意字符,贪婪性

是不是感觉眼熟了啊,不错,这和正则表达式很相似,而且仍然支持过滤,即可以有%*[a-z].如:

星星大哥例子回顾:

const char* s = "iios/12DDWDFF@122";

char buf[20];

sscanf( s, "%*[^/]/%[^@]", buf );

printf( "%s\n", buf );

由例子3-》取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。

sscanf("123456 abcdedf", "%[^ ]", buf);

printf("%s\n", buf);

结果为:123456

所以周星星的代码总结应该为:

const char* s = "iios/12DDWDFF@122";

char buf[20];

sscanf( s, "%*[^/]/%[^@]", buf );

printf( "%s\n", buf );

先将 "iios/"过滤掉,再将到字符'@'为止的一串12DDWDFF(由例3可得此串到@为止,把@122舍掉)内容即是:12DDWDFF送到buf中,得到结果。

Ⅳ scanf 读入三个数据忽略中间一个语法怎么写

我想知道这样子又有什么意义? 你可以看一下 scanf 格式 大全

A format specification has the following form:
%[*] [width]
[{h | l | I64 | L}]type
The format argument specifies the interpretation of the input and can contain
one or more of the following:

White-space characters: blank (' '); tab ('\t'); or newline ('\n').

A white-space character causes scanf to read, but not store, all
consecutive white-space characters in the input up to the next non–white-space
character.

One white-space character in the format matches any number (including 0) and
combination of white-space characters in the input.
Non–white-space characters, except for the percent sign (%).

A non–white-space character causes scanf to read, but not store, a
matching non–white-space character.

If the next character in stdin does not match, scanf
terminates.
Format specifications, introced by the percent sign (%).

A format specification causes scanf to read and convert characters in
the input into values of a specified type. The value is assigned to an argument
in the argument list.
The format is read from left to right.
Characters outside format specifications are expected to match the sequence
of characters in stdin; the matching characters in stdin are
scanned but not stored. If a character in stdin conflicts with the format
specification, scanf terminates, and the character is left in
stdin as if it had not been read.
When the first format specification is encountered, the value of the first
input field is converted according to this specification and stored in the
location that is specified by the first argument.
The second format specification causes the second input field to be converted
and stored in the second argument, and so on through the end of the
format string.
An input field is defined as all characters up to the first white-space
character (space, tab, or newline), or up to the first character that cannot be
converted according to the format specification, or until the field width (if
specified) is reached.
If there are too many arguments for the given specifications, the extra
arguments are evaluated but ignored.
The results are unpredictable if there are not enough arguments for the
format specification.
Each field of the format specification is a single character or a number
signifying a particular format option.
The type character, which appears after the last optional format
field, determines whether the input field is interpreted as a character, a
string, or a number.
The simplest format specification contains only the percent sign (%)
and a type character (for example, %s).
If a percent sign is followed by a character that has no meaning as a
format-control character, that character and the following characters (up to the
next percent sign) are treated as an ordinary sequence of characters, that is, a
sequence of characters that must match the input.
For example, to specify that a percent-sign character is to be input, use
%%.
An asterisk (*) following the percent sign suppresses assignment of the next
input field, which is interpreted as a field of the specified type. The field is
scanned but not stored.

当然 需要你有 英语功底

Ⅵ C语言问题 scanf读取问题

char类型数据在输入时,用scanf()函数输入时,格式控制串用%c,但由于输入的方式不同,代码要采用不同的语句进行控制。输入一个字符,按一次回车 #include void main() { int i; char ch; for( i=0;i<10;i++ ){ printf("input %d : ", i+1); scanf("%c%*c", &ch ); //用%*c吸收掉回车符。不然,下一次读字符,就会读到这个回车符。 printf("%c:%d\n", ch, ch ); //输出字符和ASCII值 %c表示输出按字符,%d表示输出按ascii值。 } } 连续输入字符,直到回车结束(这时,不需要加过滤操作) #include void main() { int i; char ch; for( i=0;i<10;i++ ){ scanf("%c", &ch ); //或用ch=getchar(); if ( ch=='\n') break; //遇回车结束输入 printf("%c:%d\n", ch, ch ); //输出字符和ASCII值 } } 用户在键盘输入时,所有的按键不会直接反应到程序变量中,而是先存储到输入缓存区中,程序在读取数据时,是从输入缓存中读取。所有的按键都会映射成相应的字符,如:回车、空格等都是有效的字符,所以,在读字符时,程序不会自动忽略它们,如果需要忽略,需要进行程序代码控制。

Ⅶ 急!!scanf怎样过滤空格和换行。。。

scanf()函数默认空格、制抄表符、换行符为袭数值、字符和字符串的分隔符,也就是说,是自动过滤的,比如
int val;
char ch,s[50];
scanf("%d%c%s");
可以输入5 A character
该读入语句可使val = 5,ch = 'A',s = "character"。

Ⅷ C语言中,scanf时输入数据时, 如何忽略输入的字符

输入完数据,紧跟着一个getchar()可以吸收一个字符

Ⅸ C语言中用scanf函数输入字符时,为什么要在输入控制符%c前面加空格用scanf还有哪些要注意

空格确实不是必须的,但有了空格就可以忽略你输入的空格。

例如:scanf(" %c" ,&c),你输入了' a'(a前面有个空格),a就能被c接受。

但控制符前如果没空格,那c就接受了空格,这个可以防止误操作,忽略空格输入,接受第一个非空格输入。

注意事项:

对于scanf()而言,%c是个较为特殊的说明符。 %c前没空格,scanf()将读取标准输入流中的第一个字符,%c前有空格,scanf()则读取标准输入流中第一个非空白字符,屏蔽了空白字符。


(9)scanf过滤哪些扩展阅读:

scanf

C语言中常用的标准输入输出函数,它的常规用法是scanf(“输入格式”,输入地址),scanf从输入缓冲区取入数据按照指定的“输入格式”存储到指定的“输入地址”。

但是有一类问题通常令人头疼,那就是字符串的读入,此处仅仅讨论使用scanf读取字符串的一些问题。理论上你只需要定义一个字符指针,然后scanf每次读入字符存储到该指针所指的存储空间,之后指针值自动加1。

阅读全文

与scanf过滤哪些相关的资料

热点内容
九阳倍浓豆浆机用过滤吗 浏览:474
进行二元混合物的平衡蒸馏 浏览:799
直排净化器多少钱 浏览:951
烧烤净化器不干净怎么回事 浏览:909
中水回用余氯要求 浏览:589
扬子反渗透RO一体直饮机 浏览:309
污水处理存在的主要问题 浏览:74
阳离子交换树脂柱原理 浏览:31
污水处理池简单模型 浏览:604
坐便器水垢怎么处理 浏览:405
用树脂和十分制作的玉器 浏览:368
饮水机和水杯怎么摆放 浏览:980
饮水机接水声音大怎么办 浏览:16
ro机和超滤机的区别 浏览:341
超滤膜对COD要求 浏览:723
水管道有水垢用什么可以清理 浏览:620
卫生院污水处理管理规章制度 浏览:331
2k显示器提升大 浏览:664
农村污水处理终端池 浏览:280
2019中国污水排放总量 浏览:725