scanf

在C语言中,scanf函数从标准输入(键盘)读取用户输入的数据。这是一个常用的函数,但也有很多注意事项和细微差别需要了解。

1.基本语法

int scanf(const char *format, ...);
参数:

format
:一个字符串,指定输入的格式。
...
:可变参数,根据格式字符串来确定类型和数量。

2.返回值:

该函数返回读取并成功转换的项目数量。如果发生错误或到达文件末尾,则返回一个负值。

例子:

int a;
float b;
char c[10];
scanf("%d %f %s", &a, &b, c);

在这个例子中,我们读取三种类型的数据:一个整数、一个浮点数和一个字符串。每个数据类型都需要一个对应的变量,并且使用 &操作符来获取变量的地址,因为 

scanf 需要指向内存中的位置存储读取的数据。

注意:

  • 在读取字符串时,scanf 会读取空格之前的所有字符,直到遇到换行符或者空格。因此,如果你的输入中包含多个单词,它们会被视为一个整体。
  • 如果你想读取多个单词,1.可以使用多个 %s 格式,每个格式后面都跟一个空格。2.配合while语句与scanf的返回值。
  • char d[10], e[10];
    scanf("%s %s", &d, &e);
  • char str[20];
    while(scanf("%s",str) == 1)//sfs sett fd a ,死循环不会停止
    {
        printf("%s ",str);//依次输出sfs sett fd a
    }
  • 在读取数字时,scanf会读取空格之前的数字,直到遇到换行符或者空格。
  •      int n, i;
         printf("Enter the number of integers: ");
         scanf("%d", &n);//终端输入3 4 5 6时,读取n的值遇到空格停止,此时n==3;其余的4 5 6仍然保存在缓冲区中,等待下一个scanf语句
         int a[101];
         printf("Enter %d numbers separated by spaces: ", n);
         for(i = 0; i < n; i++) 
        {
             scanf("%d", &a[i]);//a[i]依次保存了数字4,5,6
         }
  • scanf 在读取数据时是非常容易出错的。如果用户输入的数据类型与你在 scanf 中指定的不匹配,程序可能会崩溃或者出现未定义的行为。因此,始终要检查 scanf 的返回值,以确保读取的数据是正确的。在读取字符串时,scanf会自动添加一个空字符 \0来结束字符串。因此,你需要为字符串分配足够的内存,以便存储这个空字符
 i.e.   3 12 24 223 //第一个数字表示,后续数字的个数
int n,m;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
  scanf("%d", &m);
}
case4:读取一串以空格分隔的字符串()
i.e. saf dsfeg ljlk
char str[100];
float arr[100];
printf("请输入一段文本(不超过99个字符):");
fgets(str, 100, stdin); // 从标准输入读取字符串
printf("你输入的是:%s\n", str); // 打印读取的字符串
str[strlen(str)-1] = '\0';//处理掉fgets读取的\n
int sum = 0, count = 0;
char *token;
char *saveptr;
for (token = strtok_r(str, " ", &saveptr); token; token = strtok_r(NULL, " ", &saveptr))
{
  printf("%s\n", token);
  arr[count] = atof(token);
  sum += arr[count];
  count++;
}

 

 
 
 
 
 
posted @ 2023-11-28 20:27  Lunais  阅读(24)  评论(0编辑  收藏  举报