while(scanf("%hd", &temp) != 1)
时间: 2023-11-27 15:46:20 浏览: 50
while(scanf("%hd", &temp) != 1)是一个循环语句,当输入的值不是一个short类型的整数时,循环会一直执行。scanf()函数返回成功读取的参数个数,如果返回值不等于1,则说明输入的不是一个short类型的整数,循环会继续执行。直到输入的是一个short类型的整数,循环才会结束。
相关问题
void zengjia(struct student *head) { int flag, i = 1; char change = '\0'; //system("cls"); do { struct student *temp= (student*) malloc(sizeof(student)); struct student *p1; flag = 0; printf("添加的第%d个学生:\n", i); printf("学号:"); scanf("%s", temp->num); p1 = head->next; student *q1 = head; while (p1) { if (strcmp(p1->num, temp->num) == 0) { printf("学号已存在。\n"); flag++; return; } p1 = p1->next; q1 = q1->next; } if (flag == 0) { printf("\n输入正确,请继续:\n"); printf("\n姓名:"); scanf("%s", temp->name); printf("\n金额:"); scanf("%lf", &temp->money); printf(" 此学生信息已添加成功!\n"); temp->next = NULL; q1->next = temp; i++; } printf("---是否继续添加下一个学生信息---\n"); printf(" Y/N \n"); do { change = getchar(); } while (change != 'y' && change != 'Y' && change != 'n' && change != 'N'); } while (change == 'Y' || change == 'y'); }
好的,以下是您提供的代码的注释:
```
void zengjia(struct student *head) {
int flag, i = 1; // 定义标记变量flag和计数变量i
char change = '\0'; // 定义字符变量change,初值为'\0'
//system("cls"); // 清屏(注释掉了)
// 循环添加学生信息
do {
struct student *temp= (student*) malloc(sizeof(student)); // 动态分配内存
struct student *p1;
flag = 0; // 标记变量flag初值设为0
printf("添加的第%d个学生:\n", i);
printf("学号:");
scanf("%s", temp->num);
p1 = head->next; // p1指向链表第一个节点
student *q1 = head; // q1指向head
while (p1) { // 遍历链表
if (strcmp(p1->num, temp->num) == 0) { // 如果学号已存在
printf("学号已存在。\n");
flag++; // 标记变量flag加1
return; // 直接返回
}
p1 = p1->next; // 指针p1指向下一个节点
q1 = q1->next; // 指针q1指向p1的前一个节点
}
if (flag == 0) { // 如果学号不存在
printf("\n输入正确,请继续:\n");
printf("\n姓名:");
scanf("%s", temp->name);
printf("\n金额:");
scanf("%lf", &temp->money);
printf(" 此学生信息已添加成功!\n");
temp->next = NULL;
q1->next = temp; // 将新节点添加到链表尾部
i++; // 计数器加1
}
// 是否继续添加下一个学生信息
printf("---是否继续添加下一个学生信息---\n");
printf(" Y/N \n");
do {
change = getchar();
} while (change != 'y' && change != 'Y' && change != 'n' && change != 'N');
} while (change == 'Y' || change == 'y'); // 如果输入为Y或y,则继续添加
}
```
希望这些注释能帮助您理解这段代码的功能和实现方式。
while ( scanf("%s",&s)!=EOF)
在C语言中,`while (scanf("%s",&s)!=EOF)` 是一个常见的用法,用于在输入流中循环读取字符串,直到遇到文件结束符(EOF)为止。
这个语句的含义是,当`scanf`函数成功读取一个字符串并返回成功输入的个数时,循环继续执行。而当`scanf`函数返回EOF时,表示已经到达输入流的末尾,循环结束。
下面是一个示例代码,演示了如何使用`while (scanf("%s",&s)!=EOF)`来循环读取字符串并输出:
```c
#include <stdio.h>
int main() {
char s[100];
while (scanf("%s", &s) != EOF) {
printf("输入的字符串是:%s\n", s);
}
printf("输入流已结束。\n");
return 0;
}
```
这段代码会不断读取输入的字符串,并将其输出,直到输入流结束。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)