c - C: 问题 printf 和 scanf
问题描述
#include <stdio.h>
int main()
{
char name[90];
int age;
char letter;
printf("What is your name?\n");
scanf("%s", &name);
printf("How old are you?\n");
scanf("%d", &age);
printf("Where are you from?\n");
scanf("%s", &letter);
printf("Your name is %s, You are %d, You are from %s\n");
return 0;}
块引用
这是我的代码,但不能正常工作。
你的名字是 å[N ⌂,你是 1323785094,你来自.----- 我开始了。
解决方案
您的代码中存在三个主要问题:
scanf("%s", &name);
格式说明
%s
符期望参数是指向数组第一个元素的指针,并且类型为char *
. 由于name
是一个数组,&name
是一个指向数组本身的指针,并且类型为char (*)[90]
.要获取指向第一个元素的指针,请使用
&name[0]
或 plainname
作为数组自然衰减为指向其第一个元素的指针。scanf("%s", &letter);
如前所述,
%s
格式需要一个指向数组第一个元素的指针。'\0'
它会在它读取的字符之后将字符串空终止符添加到数组中。这意味着即使是单个字符也会将两个字符写入“数组”。
对于单个字符,请使用
%c
格式说明符。但请注意,您很可能需要格式中的前导空格,以跳过任何前导空格(如前一个输入中的换行符):scanf(" %c", &letter);
printf("Your name is %s, You are %d, You are from %s\n");
在这里,您告诉
printf
打印一些参数,但您不提供实际参数。另请注意,
scanf
要打印单个字母,您需要使用以下%c
格式:printf("Your name is %s, You are %d, You are from %c\n", name, age, letter);
这里列出的所有三个问题本身都会导致未定义的行为。
推荐阅读
- javascript - 没有为具有域的线图绘制对数刻度(最小值:0.97,最大值:0.99)
- python - 如何从datalab中的pandas数据框将数据批量上传到bigquery表中
- php - 为什么我的网站无法上传到我的数据库(使用 MySQLI),然后没有重定向我?
- css - 根据条件应用 css
- python - 来自数组和 np.dtype 对象的结构化数组
- outlook - Outlook 加载项 - AttachmentId 格式错误
- python - Scikit:自定义估算器:无法克隆
- pyspark - pyspark:在同一列(使用数组)上使用多个 UDF 函数时出现意外行为
- android - AutoTransition 在 Motion 布局中不起作用
- java - 如何查看我连接的 ble 模块的服务和特性?