scanf_s()读入字符串和数字
2017-08-17 18:56
120 查看
拟解决问题描述如下:
(以录入学生信息为列)
1. 从键盘输入要录入的学生个数
2. 输入学生的姓名(字符串)、数学成绩(数字)、语文成绩(数字)
问题解的关键:在输入姓名(字符串)、数学成绩(数字)、语文成绩(数字)时,采用如下方式,会出现访问冲突报错:
究其原因还是在于scanf_s函数,在输入字符串的时候一定要限定输入字符串的长度,修改成如下代码即可解决问题:
scanf_s("%s", st[i].name, NAME_LEN);
scanf_s("%d %d", &st[i].math, &st[i].chinese);
完成代码如下:
(以录入学生信息为列)
1. 从键盘输入要录入的学生个数
2. 输入学生的姓名(字符串)、数学成绩(数字)、语文成绩(数字)
问题解的关键:在输入姓名(字符串)、数学成绩(数字)、语文成绩(数字)时,采用如下方式,会出现访问冲突报错:
scanf_s("%s %d %d", st[i].name, &st[i].math, &st[i].chinese);
究其原因还是在于scanf_s函数,在输入字符串的时候一定要限定输入字符串的长度,修改成如下代码即可解决问题:
scanf_s("%s", st[i].name, NAME_LEN);
scanf_s("%d %d", &st[i].math, &st[i].chinese);
完成代码如下:
#include <stdio.h> #include <stdlib.h> #define NAME_LEN 50 typedef struct student { char name[NAME_LEN]; int chinese; int math; }student; int main() { student *st = NULL; int i = 0, n = 0; printf("请输入学生个数\n"); scanf_s("%d", &n); st = (student*)malloc(n * sizeof(student)); printf("请输入学生的姓名 数学成绩 语文成绩:\n"); for (i = 0; i < n; i++){ scanf_s("%s", st[i].name, NAME_LEN); //关键在这里,没有NAME_LEN会报错 scanf_s("%d %d", &st[i].math, &st[i].chinese); } for (i = 0; i < n; i++) printf("%s 数学成绩:%d 语文成绩:%d\n", st[i].name, st[i].math, st[i].chinese); free(st); return 0; }
相关文章推荐
- 从文件中读入文本,文本内容为几个字符串,用逗号间隔,将其中同时含有字母和数字的字符串去除,留下仅仅只包含字母或数字的字符串,然后进行排序
- scanf提取字符串 sscanf分离字符串 sprintf将数字转换为字符串
- HDU 1234(开门人和关门人-scanf解决带注释数字读入)
- scanf 读入时分离字符串和整数。。
- 用scanf获取一行包括空格的字符串,并指定以特定输入结束读入
- c语言中怎样用scanf()读入带空格的字符串
- C语言---关于scanf读入字符串的一些问题
- Haskell读入一个字符串,把它转换成数字
- scanf读入字符串与读入字符的区别
- scanf()/getchar()和gets()读入字符和字符串的详细讲解
- 用sprintf,scanf实现数字与字符串的转换
- 读入一个字符串str,输出字符串str中的连续最长的数字串
- c语言中怎样用scanf()读入带空格的字符串?
- 当读入一个数字,scanf()函数的写法
- 读入一个字符串str,输出字符串str中的连续最长的数字串
- scanf(),printf()和gets(),puts()在输入输出字符串时的区别
- js 字符串转换成数字的三种方法
- C/C++中字符串与数字相互转换
- IOS随机产生字符串,数字
- 我的java之路——按照电话机表盘数字与字符的对应关系(这里用数字1而不是0代表空格),用数字串匹配字符串