我们许多人都知道scanf的传统用法。好吧,这是一些鲜为人知的事实
如何只读取我们需要的部分输入?例如,考虑一些仅包含字符后跟整数或浮点数的输入流。而且我们只需要扫描那个整数或浮点数。
那是 ,
输入:“这是值100”,
输出:读取的值为100
输入:“这是值21.2”,
输出:读取的值为21.2
/* C program to demonstrate that we can
ignore some string in scanf() */
#include
int main()
{
int a;
scanf("This is the value %d", &a);
printf("Input value read : a = %d", a);
return 0;
}
// Input : This is the value 100
// Output : Input value read : a = 100
现在,假设我们不知道前面的字符是什么,但是我们肯定知道最后一个值是整数。我们如何将最后一个值扫描为整数?
仅当输入字符串中没有空格时,以下解决方案才有效。
/* Sample C program to demonstrate use of *s */
#include
int main()
{
int a;
scanf("%*s %d", &a);
printf("Input value read : a=%d",a);
return 0;
}
// Input: "blablabla 25"
// Output: Value read : 25
说明:scanf中的%* s用于根据需要忽略某些输入。在这种情况下,它将忽略输入,直到下一个空格或换行为止。同样,如果您写入%* d,它将忽略整数,直到下一个空格或换行为止。
乍一看,上述事实似乎并不是有用的技巧。为了了解其用法,让我们首先来看fscanf()。
fscanf():厌倦了从文件中读取所有笨拙的语法?好吧,fscanf进行了救援。
int fscanf(FILE *ptr, const char *format, ...)
fscanf从FILE指针(ptr)指向的文件中读取,而不是从输入流中读取。
考虑以下文本文件abc.txt
NAME AGE CITY
abc 12 hyderbad
bef 25 delhi
cce 65 bangalore
现在,我们只想读取上述文本文件的city字段,而忽略所有其他字段。将fscanf和上面提到的技巧结合起来可以轻松实现此目的
/*c program demonstrating fscanf and its usage*/
#include
int main()
{
FILE* ptr = fopen("abc.txt","r");
if (ptr==NULL)
{
printf("no such file.");
return 0;
}
/* Assuming that abc.txt has content in below
format
NAME AGE CITY
abc 12 hyderbad
bef 25 delhi
cce 65 bangalore */
char buf[100];
while (fscanf(ptr,"%*s %*s %s ",buf)==1)
printf("%s\n", buf);
return 0;
}
输出:
CITY
hyderbad
delhi
bangalore
练习:使用fscanf计算文件中单词,字符和行的数量!
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。