如何给long int录入并打印数据
时间: 2024-12-20 16:21:25 浏览: 14
在C语言中,`long int`类型用于存储比`int`更大的整数值。以下是输入和打印`long int`数据的基本步骤:
**录入数据:**
1. 使用`scanf()`函数从用户那里获取输入,这将读取整数值直到遇到空格或换行符。
```c
#include <stdio.h>
int main() {
long int large_num;
printf("请输入一个long int值:");
scanf("%ld", &large_num); // %ld 表示读取long int类型的输入
return 0;
}
```
在这个例子中,用户将被提示输入一个长整数,然后该值会被赋给变量`large_num`。
**打印数据:**
要打印`long int`数据,可以使用`printf()`函数,同样使用 `%ld` 格式说明符。
```c
#include <stdio.h>
int main() {
long int large_num = 1234567890L; // 或者从用户输入获取的值
printf("您输入的long int值是:%ld\n", large_num);
return 0;
}
```
这将输出类似 "您输入的long int值是:1234567890" 的结果。
记得在输入`%ld`之前添加 `L` 后缀(也可以是`l`),这是告诉编译器这不是八进制数而是十六进制前缀。
相关问题
struct workers { char name[15];//姓名 char gender;//性别 char department[18];//单位 unsigned int age;//年龄 unsigned long telephone;//电话 unsigned long wage;//工资 unsigned long num;//职工号 struct workers* next; };建立此结构体的录入信息函数
可以按照以下步骤编写录入信息函数:
1. 定义函数头:`void input_info(struct workers* head)`,该函数接收一个指向结构体链表头节点的指针。
2. 在函数内部定义一个指向当前节点的指针 `p`,初始值为 `head`。
3. 在循环中遍历链表,直到找到最后一个节点,即 `p->next == NULL`。
4. 在循环内部,为当前节点 `p` 分配内存空间:`p->next = (struct workers*)malloc(sizeof(struct workers))`。
5. 判断内存是否分配成功,如果失败则输出错误信息并退出函数。
6. 提示用户输入各个字段的值,并使用 `scanf()` 函数读取用户输入,赋值给 `p->next` 指向的节点。
7. 如果输入的职工号已经存在,则输出错误信息并释放刚刚分配的内存,退出函数。
8. 如果输入的职工号是一个新的职工,则将当前节点的指针移动到下一个节点:`p = p->next`。
9. 循环结束后,输出提示信息并返回。
完整代码如下:
```c
void input_info(struct workers* head)
{
struct workers* p = head;
while (p->next != NULL) {
p = p->next;
}
// p 指向最后一个节点
p->next = (struct workers*)malloc(sizeof(struct workers));
if (p->next == NULL) {
printf("Error: memory allocation failed.\n");
return;
}
printf("请输入职工姓名:");
scanf("%s", p->next->name);
printf("请输入职工性别(M/F):");
scanf(" %c", &p->next->gender);
printf("请输入职工所在单位:");
scanf("%s", p->next->department);
printf("请输入职工年龄:");
scanf("%u", &p->next->age);
printf("请输入职工电话:");
scanf("%lu", &p->next->telephone);
printf("请输入职工工资:");
scanf("%lu", &p->next->wage);
printf("请输入职工号:");
scanf("%lu", &p->next->num);
// 检查职工号是否重复
struct workers* q = head;
while (q->next != p->next) {
if (q->next->num == p->next->num) {
printf("Error: duplicate worker number.\n");
free(p->next);
p->next = NULL;
return;
}
q = q->next;
}
printf("录入成功!\n");
}
```
2.现在多数学校的成绩管理都由计算机进行管理,这就需要有相应的应用程序,编写成绩管理应用程序,有成绩录入模块。成绩录入过程中,难免出现录入数据的类型出现错误,或录入的成绩不在合理的范围。在录入过程中,若出现上述错误,程序应该如何处理? 请你根据上述问题,合理设计相关异常类,并在录入成绩中,根据录入的数据,捕获异常并进行处理。
根据题目要求,我们需要设计两个异常类,一个用于处理数据类型错误,一个用于处理成绩范围错误。具体实现可以参考以下代码:
```java
package grade;
public class GradeManager {
public static void main(String[] args) {
try {
Grade[] grades = new Grade[3];
grades[0] = new Grade("张三", 85);
grades[1] = new Grade("李四", "90");
grades[2] = new Grade("王五", 110);
// 输出成绩单
for (Grade grade : grades) {
System.out.println(grade);
}
} catch (NumberFormatException e) {
System.out.println("成绩格式不正确!");
} catch (IllegalArgumentException e) {
System.out.println("成绩不在合理的范围内!");
}
}
}
class Grade {
private String name;
private int score;
public Grade(String name, int score) throws IllegalArgumentException {
if (score < 0 || score > 100) {
throw new IllegalArgumentException();
}
this.name = name;
this.score = score;
}
public Grade(String name, String score) throws NumberFormatException, IllegalArgumentException {
int s = Integer.parseInt(score);
if (s < 0 || s > 100) {
throw new IllegalArgumentException();
}
this.name = name;
this.score = s;
}
public String getName() {
return name;
}
public int getScore() {
return score;
}
public String toString() {
return name + ": " + score;
}
}
class NumberFormatException extends Exception {
private static final long serialVersionUID = 1L;
public NumberFormatException() {
super("成绩格式不正确!");
}
}
class IllegalArgumentException extends Exception {
private static final long serialVersionUID = 1L;
public IllegalArgumentException() {
super("成绩不在合理的范围内!");
}
}
```
在上面的代码中,我们设计了两个异常类 NumberFormatException 和 IllegalArgumentException,分别用于处理数据类型错误和成绩范围错误。在 Grade 类的两个构造函数中,我们根据输入的成绩检查其是否合法,如果不合法就抛出相应的异常。在 main 函数中,我们创建了一个包含三个成绩的数组,并分别使用两个构造函数初始化其中的成绩。如果构造函数抛出异常,就捕获并输出异常信息。最后,我们输出整个成绩单,包括每个学生的姓名和成绩。
阅读全文