码迷,mamicode.com
首页 > 其他好文 > 详细

scanf("%d%*c", &n);的意思

时间:2021-06-16 18:13:15      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:忽略   类型   根据   修改   之间   例子   char   不可   阅读   

在做题中,常常要求读入一行字符串,而这串字符里面可能有空格、制表符等空白字符,如果直接用%s是不可以的,于是有些人就想到用gets(),但由于gets很难控制,故而一般不推荐使用,所以用%[^\n]就可以很好的解决这个问题了,^表示"非"即读入其后面的字符就结束读入。
#include <stdio.h>
int main()
{
int str[100];
while(~scanf("%[^\n]%*c",str)) puts(str); //%*c的作用是读入\n,否则后面读入的将是\n
return 0;
}
经过上述代码处理,便可顺利地循环读取带有空格的字符串。
另外地,
所有对%s起作用的控制都可以用%[ ]:

%[0-9]表示只读入‘0‘到‘9‘之间的字符

%[a-zA-Z]表示只读入字母

%[^a-z]就表示读入小写字母之外的字符。

"%n[^=]" 读入"="号前的至多n 个字符

‘-‘是范围连接符,当然也可以直接列出需要读入的字符。

%c 一个单一的字符 
%d 一个十进制整数 
%i 一个整数 
%e, %f, %g 一个浮点数 
%o 一个八进制数 
%s 一个字符串 
%x 一个十六进制数 
%p 一个指针 
%n 一个等于读取字符数量的整数 
%u 一个无符号整数 
%[] 一个字符集 
%% 一个精度符号
例如从键盘输入的"1235ab86"中读取1235、86给n。
#include <stdio.h>
int skip(){
scanf("%*[^0-9]"); //跳过读入 非0-9 的字符
return 1;
}
int main()
{
int n;
while(skip()&&~scanf("%d",&n)) //再读入skip处理后的字符给n
printf("%d\n",n);
return 0;
}
//输出为:1235
//86
整数部分的高位有多余的0时,过滤0以获取不含0的整数 
#include <stdio.h>
int str[100];
int fun(){
scanf("%[^1-9]",&str); //读入字符,如果遇到非1-9的字符,停止
return 1;
}
int main()
{
while(fun()&&~scanf("%s",&str)){ //scanf再次读入经fun处理后的字符串,会覆盖fun读入的字符
puts(str); //这样可以达到删去不想要的字符的目的
}
return 0;
}
//输入0000001234,56
//输出1234,56
根据第一例,也可使用跳过字符的方式获取
#include <stdio.h>
int str[100];
int skip(){
scanf("%*[^1-9][^,]"); //跳过读入非1-9和非,的字符
return 1;
}
int main()
{
while(skip()&&~scanf("%s",&str)){ //scanf再次读入经skip处理后的字符串
printf("%s",str); //这样可以达到删去不想要的字符的目的
//也可以在跳过读取后,scanf输入给int变量n而不是字符数组str,修改相应输入输出可灵活变换
}
return 0;

 

c语言中scanf("%d%*c", &n);的意思。

2018年07月22日 17:08:00 韩小妹 阅读数:3274

scanf()中%*表示忽略掉一个输入项。上面的程序执行时,比如输入 1 2,m获得的值就是2。

\n和c起的作用:\n在scanf()中会被忽略掉,%*c表示忽略掉一个字符型的输入项。

最佳答案

格式字符串的一般形式为:

%[*][输入数据宽度][长度]类型

其中有方括号[]的项为任选项

“*”符:用以表示该输入项,读入后不赋予相应的变量,即跳过该输入值。

如:

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

当输入为:1 2 3时,把1赋予a,2被跳过,3赋予b。

%*c作用时读取输入流中数字后的一个字符,并丢弃,使得后面的输入函数不能读到那个字符

跳过一个字符

举个例子

#include “stdio.h”

int main(){

int a, b;

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

printf("%d %d\n", a, b);

return 0;

}

你输入1n2,那么scanf把1读取赋给变量a,如果跳过一个char(这里是 ‘n’)接着读取2赋给变量b

scanf("%d%*c", &n);的意思

标签:忽略   类型   根据   修改   之间   例子   char   不可   阅读   

原文地址:https://www.cnblogs.com/alix-1988/p/14888665.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!