char s2[10]; /**********ERROR**********/ scanf ("%s",&s2);
时间: 2024-01-09 17:23:28 浏览: 40
根据提供的引用内容,以下是关于char数组的输入错误的解释和示例代码:
char数组在使用scanf函数进行输入时,不需要使用取地址符&。取地址符&用于获取变量的地址,而char数组本身就是一个地址,所以不需要再使用取地址符。
下面是一个示例代码,演示了如何正确输入一个char数组:
```c
char s2[10];
scanf("%s", s2);
```
请注意,这里没有使用取地址符&,而是直接将数组名s2作为参数传递给scanf函数。
相关问题
本关任务:编写一个函数: char *ReplaceString(char * str, char * s1, char * s2); 该函数用s2替换str中的s1,函数返回替换后的字符串的指针。 题目中已经给出main函数,main函数会调用ReplaceString函数进行测试,依次输入字符串str、s1和s2,最后输出替换后字符串。
以下是函数代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *ReplaceString(char *str, char *s1, char *s2) {
char *result; // 存放替换后的字符串
char *p; // 指向str中s1第一次出现的位置
char *temp; // 临时指针变量
int len1 = strlen(s1); // s1的长度
int len2 = strlen(s2); // s2的长度
int count = 0; // 统计s1出现的次数
// 统计s1出现的次数
p = str;
while ((p = strstr(p, s1)) != NULL) {
count++;
p += len1;
}
// 分配空间
result = (char *)malloc(strlen(str) + count * (len2 - len1) + 1);
if (result == NULL) {
printf("Error: Out of memory\n");
return NULL;
}
// 替换
p = str;
temp = result;
while (*p != '\0') {
if (strncmp(p, s1, len1) == 0) {
strncpy(temp, s2, len2);
p += len1;
temp += len2;
} else {
*temp++ = *p++;
}
}
*temp = '\0';
return result;
}
int main() {
char str[100], s1[20], s2[20];
printf("请输入字符串:");
scanf("%s", str);
printf("请输入要替换的字符串:");
scanf("%s", s1);
printf("请输入替换成的字符串:");
scanf("%s", s2);
char *result = ReplaceString(str, s1, s2);
printf("替换后的字符串为:%s\n", result);
free(result);
return 0;
}
```
函数思路:
1. 首先统计s1在str中出现的次数,用以计算替换后的字符串长度。
2. 分配空间,存放替换后的字符串。
3. 遍历str,如果当前位置是s1,则用s2替换;否则将当前字符复制到替换后的字符串。
4. 返回替换后的字符串的指针。
int i; typedef struct student { int num; char name[20]; int score[3]; float avg; }student; void Inputdata(student* stu) { printf("请输入新学生的信息:\n"); printf("num name s1 s2 s3\n"); scanf("%d %s %d %d %d", &(stu->num), stu->name, &(stu->score[0]), &(stu->score[1]), &(stu->score[2])); stu->avg = (stu->score[0] + stu->score[1] + stu->score[2]) / 3.0; } void readdate(student stu[]) { FILE* fp = fopen("stu_ sort.txt", "r"); if (fp == NULL) { printf("read stu_ sort file error!"); return -1; } for (i = 0; i < 5; i++)//从文件中读入数据 { fscanf(fp, "%d %s %d %d %d %f", &stu[i].num, stu[i].name, &stu[i].score[0], &stu[i].score[1], &stu[i].score[2], &stu[i].avg); } fclose(fp); } void Insertdata(student* oldstu, student* newstu,int n) { int pos = 0; while (pos < n) { if ((newstu->avg) < (oldstu[pos].avg)) break; pos++; } for (i = n; i > pos; i--) { memcpy(&oldstu[i],&oldstu[i-1], sizeof(student)); } memcpy(&oldstu[pos], newstu, sizeof(student)); } void writedate(student* stu) { FILE* fp = fopen("stu_new_sort.txt", "w"); if (fp == NULL) { printf("write file error!"); return -1; } for (i = 0; i < 6; i++)//使用fprint函数将结构体数组stu中的数据写入fp { fprintf(fp, "%d %s %d %d %d %f\n", stu[i].num, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].avg); } fclose(fp); } int main() { student newstu;//首先定义一个新学生信息 Inputdata(&newstu);//输入这个新学生的信息 student oldstu[6]; readdate(oldstu);//调用函数从上一题排好序的文件中读入5个学生数据 Insertdata(oldstu, &newstu,5);//把新数据有序地插入到老数组中 writedate(oldstu);//把含有新数据的数组写入到新文件 return 0; }改写成正确的
int i;
typedef struct student {
int num;
char name[20];
int score[3];
float avg;
} student;
void Inputdata(student* stu) {
printf("请输入新学生的信息:\n");
printf("num name s1 s2 s3\n");
scanf("%d %s %d %d %d", &(stu->num), stu->name, &(stu->score[0]), &(stu->score[1]), &(stu->score[2]));
stu->avg = (stu->score[0] + stu->score[1] + stu->score[2]) / 3.0;
}
int readdate(student stu[]) {
FILE* fp = fopen("stu_sort.txt", "r");
if (fp == NULL) {
printf("read stu_sort file error!");
return -1;
}
for (i = 0; i < 5; i++) {
fscanf(fp, "%d %s %d %d %d %f", &stu[i].num, stu[i].name, &stu[i].score[0], &stu[i].score[1], &stu[i].score[2], &stu[i].avg);
}
fclose(fp);
return 0;
}
void Insertdata(student* oldstu, student* newstu, int n) {
int pos = 0;
while (pos < n) {
if ((newstu->avg) < (oldstu[pos].avg))
break;
pos++;
}
for (i = n; i > pos; i--) {
memcpy(&oldstu[i], &oldstu[i - 1], sizeof(student));
}
memcpy(&oldstu[pos], newstu, sizeof(student));
}
int writedate(student* stu) {
FILE* fp = fopen("stu_new_sort.txt", "w");
if (fp == NULL) {
printf("write file error!");
return -1;
}
for (i = 0; i < 6; i++) {
fprintf(fp, "%d %s %d %d %d %f\n", stu[i].num, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].avg);
}
fclose(fp);
return 0;
}
int main() {
student newstu;
Inputdata(&newstu);
student oldstu[6];
if (readdate(oldstu) == -1) {
return -1;
}
Insertdata(oldstu, &newstu, 5);
if (writedate(oldstu) == -1) {
return -1;
}
return 0;
}
阅读全文