scanf("%s",temp);
时间: 2024-06-23 10:01:51 浏览: 7
`scanf("%s", temp)` 是C语言中的一个输入函数,用于从标准输入(通常是键盘)读取字符串到变量 `temp` 中。这里的 `%s` 是格式说明符,告诉scanf预期接收到一个字符串,直到遇到空格、制表符、换行符或文件结束符为止。
下面是一个简单的示例:
```c
#include <stdio.h>
#include <string.h> // 必须包含此头文件以使用strlen函数
int main() {
char temp[100]; // 声明一个足够大的数组来存储字符串
printf("请输入一个字符串: ");
scanf("%s", temp); // 从输入读取字符串并存储在temp中
printf("你输入的字符串是: %s\n", temp); // 打印读取的字符串
return 0;
}
```
在这个例子中,程序会提示用户输入一个字符串,然后读取并打印出来。注意,由于`%s`不处理字符串长度,所以要确保提供的缓冲区足够大以容纳可能输入的最长字符串,或者使用`fgets`代替,以避免缓冲区溢出。
相关问题
void enter() { int i; for(i=0;i<STUDENT_NUM;i++) { if(student[i].no==-1) { break; } } if(i==STUDENT_NUM) { printf("存储已满\n"); } struct Student temp; printf("\n请输入学号:"); scanf("%d",&temp.no); printf("\n请输入姓名:"); getchar(); scanf("%s",&temp.name); printf("\n请输入年龄:"); getchar(); scanf("%d",&temp.age); printf("\n请输入性别:"); scanf("%s",&temp.sex); printf("\n请输入班级:"); getchar(); scanf("%d",&temp.c1ass); printf("\n请输入宿舍:"); getchar(); scanf("%s",&temp.address); printf("\n请输入电话:"); getchar(); scanf("%s",&temp.phone); for(int j=0;j<STUDENT_NUM;j++) { if(student[j].no==temp.no) { printf("\n学生已被录入,请勿重复输入\n"); } } student[i]=temp; } void look() { int i; printf("\n学号 姓名 年龄 性别 班级 宿舍 电话号码\n"); for(i=0;i<STUDENT_NUM;i++) { if(student[i].no!=-1) { printf("%-4d%-4s%-4d%-3s%-4d%-5s%s\n",student[i].no,student[i].name,student[i].age,student[i].sex,student[i].c1ass,student[i].address,student[i].phone); } } printf("\n返回菜单\n"); }中,通过scanf输入的中文在printf输出之后为什么是乱码
C语言中,scanf函数默认使用空格作为输入数据的分隔符,而中文中的空格是全角空格,与英文的半角空格不同,因此在输入中文时,需要使用特殊的格式化字符"%[^\n]"来读取整行输入,防止读取到换行符之前的空格,从而导致乱码问题。
修改代码如下:
```
printf("\n请输入姓名:");
getchar();
scanf("%[^\n]",temp.name); //使用特殊的格式化字符"%[^\n]"来读取整行输入
printf("\n请输入性别:");
scanf("%[^\n]",temp.sex);
printf("\n请输入宿舍:");
scanf("%[^\n]",temp.address);
printf("\n请输入电话:");
scanf("%[^\n]",temp.phone);
```
#include <stdio.h> #include <string.h> #define n 20 void zhuce(); void denglu(); char yhm[n],mm[n]; struct imz { char yhm[n]; char mm[n]; }; int main() { int i; printf("-----------\n1.注册\n2.登陆\n0.退出\n"); scanf("%d",&i); switch(i) { case 0: break; case 1: zhuce(); break; case 2: denglu(); break; } return 0; } void zhuce( ) { struct imz z; char temp1[n],temp2[n],yhmtmp[n]; FILE *fp; fp=fopen("zhanghao","ab"); printf("输入用户名\n"); scanf("%s",yhmtmp); printf("输入密码\n"); scanf("%s",temp1); printf("输入密码确认\n"); scanf("%s",temp2);; if(!strcmp(temp1,temp2)) { strcpy(z.yhm,yhmtmp); strcpy(z.mm,temp1); fwrite(&z,sizeof(struct imz),1,fp); printf("注册成功\n"); } else { printf("注册失败\n"); zhuce(); } fclose(fp); } void denglu( ) { FILE *fp; struct imz h; char s1[n],s2[n]; fp=fopen("zhanghao","r"); printf("输入用户名\n"); scanf("%s",s1); printf("输入密码\n"); scanf("%s",s2); fread(&h,sizeof(struct imz),1,fp); if(s1==h.yhm) { if(s2==h.mm) { printf("登陆成功\n"); } } else { printf("用户名或密码错误\n"); } fclose(fp); }
这段代码是一个简单的用户注册和登录系统,使用 C 语言编写。
具体分析如下:
1. `#include<stdio.h>` 和 `#include<string.h>` 是用来引入标准输入输出库和字符串处理库的头文件。
2. `#define n 20` 定义了一个宏,表示用户名和密码的最大长度为 20 个字符。
3. `void zhuce();` 和 `void denglu();` 是两个函数的声明,分别用来处理用户注册和登录。
4. `char yhm[n],mm[n];` 定义了两个字符数组,用来存储用户输入的用户名和密码。
5. `struct imz { char yhm[n]; char mm[n]; };` 定义了一个结构体 `imz`,其中包含了两个成员变量 `yhm` 和 `mm`,分别用来存储用户名和密码。
6. `int main()` 是程序的入口函数,其中 `int` 表示函数返回值类型为整型,`main` 是函数名,空括号表示该函数没有参数。
7. `printf("-----------\n1.注册\n2.登陆\n0.退出\n");` 输出菜单,提供用户三个选项:注册、登录和退出。
8. `scanf("%d",&i);` 用户输入选项,并将其存储在变量 `i` 中。
9. `switch(i)` 根据用户输入的选项进行分支处理。
10. `case 0: break;` 如果用户选择退出,则直接退出程序。
11. `case 1: zhuce(); break;` 如果用户选择注册,则调用函数 `zhuce()` 进行注册处理。
12. `case 2: denglu(); break;` 如果用户选择登录,则调用函数 `denglu()` 进行登录处理。
13. `void zhuce( ) { ... }` 函数定义,用来处理用户注册。
14. `struct imz z;` 定义了一个结构体变量 `z`,用来存储用户注册信息。
15. `char temp1[n],temp2[n],yhmtmp[n];` 定义了三个字符数组,分别用来存储用户输入的密码和用户名。
16. `FILE *fp; fp=fopen("zhanghao","ab");` 定义了一个文件指针 `fp`,并打开了一个名为 `zhanghao` 的文件,以追加写入的方式打开。
17. `scanf("%s",yhmtmp); scanf("%s",temp1); scanf("%s",temp2);` 分别获取用户输入的用户名、密码和确认密码。
18. `if(!strcmp(temp1,temp2)) { ... } else { ... }` 如果两次输入的密码相同,则将用户名和密码存储到结构体变量 `z` 中,并将其写入文件中。否则,提示用户注册失败,并重新调用 `zhuce()` 函数。
19. `fclose(fp);` 关闭文件。
20. `void denglu( ) { ... }` 函数定义,用来处理用户登录。
21. `FILE *fp; struct imz h; char s1[n],s2[n];` 定义了一个文件指针 `fp`,一个结构体变量 `h`,以及两个字符数组 `s1` 和 `s2`,分别用来存储从文件中读取的用户名和密码,以及用户输入的用户名和密码。
22. `fopen("zhanghao","r");` 打开文件 `zhanghao`,以只读方式打开。
23. `scanf("%s",s1); scanf("%s",s2);` 获取用户输入的用户名和密码。
24. `fread(&h,sizeof(struct imz),1,fp);` 从文件中读取一个结构体大小的数据,并将其存储到变量 `h` 中。
25. `if(s1==h.yhm) { ... } else { ... }` 如果用户输入的用户名和从文件中读取的用户名相同,则比较用户输入的密码和从文件中读取的密码是否相同。如果相同,则提示用户登录成功;否则,提示用户名或密码错误。
26. `fclose(fp);` 关闭文件。
注意:该程序存在一些问题,例如在比较字符串时应该使用 `strcmp()` 函数而不是 `==` 运算符,还有一些其他的细节问题,需要进一步完善。