注册 登录
编程论坛 C++教室

求解答,这个问题怎么解决?

冯jungle 发布于 2012-12-16 00:10, 792 次点击
    case 2:{
        printf("输入姓名:\n");
        scanf("%s",name1);
        for(i=1;i<=n;i++)
            if(strcmp(student[i].name,name1)==0){(老是说这里有问题,“error C2664: 'strcmp' : cannot convert parameter 2 from 'int [10]' to 'const char *'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast,怎么解决啊?)
                printf("该生原来信息:\n");
                printf("%d  %s",student[i].number,student[i].name);
                for(j=1;j<=7;j++)
                    printf("%f",student[i].score[j]);
                printf("输入改后的信息:\n");
                printf("学号 姓名 高数 工图 英语 C语言 航概 体育 思修 \n");
                scanf("%d%s",&student[i].number,student[i].name);
                for(j=1;j<=7;j++)
                    scanf("%f",&student[i].score[j]);
            
            printf("修改完毕!\n");
            break;
            }
           }
12 回复
#2
yuccn2012-12-16 13:25
if(strcmp(student[i].name,name1)==0)
你的这个name1是否被定义成了int类型数组?这样肯定不行的,定义成char类型
#3
mmmmmmmmmmmm2012-12-17 14:24
说错了   cannot convert parameter 2 from 'int [10]' to 'const char *'

应该是把name1的定义修改为  char name[10]

[ 本帖最后由 mmmmmmmmmmmm 于 2012-12-18 10:33 编辑 ]
#4
冯jungle2012-12-17 22:50
回复 2楼 yuccn
是char 型的啊,但是就还是那个问题,看了好多遍都查不出问题在哪里,伤脑筋啊!
#5
wp2319572012-12-18 10:37
name1 必须是const char *  差一丁点都不行
#6
冯jungle2012-12-18 12:47
回复 5楼 wp231957
但是必须初始化嘛?我要的是用户输入啊,这怎么办?
#7
wp2319572012-12-18 14:29
我试了一下,估计用库函数不行  
自己重写strcmp吧
#8
mmmmmmmmmmmm2012-12-18 15:55
楼主 你把程序都发上来 看看  

这样实在没法解决


char name1[10]  这个绝对可以  

下面是测试的程序
程序代码:
#include <iostream>
using namespace std;

void main()
{
    char name1[1024];
    char name[1024] = "testname";
    cin >> name1;
    cout<< strcmp(name1, name);
}
#9
冯jungle2012-12-18 22:54
回复 8楼 mmmmmmmmmmmm
好,下面都是:
// 大作业.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "string.h"



void add();
void change();
void look();   
void sum();
void output();
void deal();

struct Student
{
    int number;
    char name[10];
    float score[7];
}student[20];
int m,n,i,j,k,num1;
char name1[10];
FILE *Grade;




int main(int argc, char* argv[])
{
   
    printf("                     学生成绩管理系统\n");
    printf("*******************************************************************\n");
   
   
    Grade=fopen("grade1.txt","w");
   

    printf("输入学生人数:\n");
    scanf("%d",&n);
    printf("学号 姓名 高数 工图 英语 C语言 航概 体育 思修 \n");
    for(i=1;i<=n;i++){
        
        printf("\nNumber:\n");
        scanf("%d",&student[i].number);
        printf("Name:\n");
        scanf("%s",student[i].name);
        printf("Grade:\n");
        for(j=1;j<8;j++){
            scanf("%f",&(student[i].score[j]));
            
        }
        deal();
    }
    printf("\n");
    printf("1---增加信息\n2---修改信息\n3---查询成绩\n4---成绩统计\n5---成绩输出\n6---退出系统\n请选择:");
    int choice;
    scanf("%d",&choice);
    while(choice!=6)
    {
        switch(choice)
        {
        case 1:add();
        case 2:change();
        case 3:look();
        case 4:sum();
        case 5:output();
        }
    }
    printf("Hello World!\n");
    return 0;
}
#include "stdafx.h"
#include "string.h"

extern  m,n,i,j,k,num1,name1[10];
struct Student
{
    int number;
    char name[10];
    float score[7];
}student[20];
extern Student student[20];
FILE *Grade;


void change()
{
    printf("选择修改方式:\n");
    printf("1--根据学号修改信息\n2--根据姓名修改信息\n");
    scanf("%d",&k);
    switch(k)
    {
    case 1:{
        printf("输入学号:\n");
        scanf("%d",&num1);
        for(i=1;i<=n;i++)
            if(student[i].number=num1){
                printf("该学生原来的信息:\n");
                printf("%d  %s  ",student[i].number,student[i].name);
                for(j=1;j<=7;j++)
                    printf("%f",student[i].score[j]);
                printf("学号 姓名 高数 工图 英语 C语言 航概 体育 思修 \n");
                printf("输入改后的信息:\n");
                scanf("%d%s",&student[i].number,student[i].name);
                for(j=1;j<=7;j++)
                    scanf("%d",&(student[i].score[j]));
                printf("修改完毕!\n");
                break;
            }
           }
    case 2:{
        printf("输入姓名:\n");
        scanf("%s",name1);
        for(i=1;i<=n;i++)
            if(strcmp(student[i].name,name1)==0){
                printf("该生原来信息:\n");
                printf("%d  %s",student[i].number,student[i].name);
                for(j=1;j<=7;j++)
                    printf("%f",student[i].score[j]);
                printf("输入改后的信息:\n");
                printf("学号 姓名 高数 工图 英语 C语言 航概 体育 思修 \n");
                scanf("%d%s",&student[i].number,student[i].name);
                for(j=1;j<=7;j++)
                    scanf("%f",&student[i].score[j]);
            
            printf("修改完毕!\n");
            break;
            }
           }
    }
}

        
           


#10
mmmmmmmmmmmm2012-12-18 23:28
回复 9楼 冯jungle
你的工程有好几个CPP?

你一个一个发成附件吧


还有 你这个看着是C的吧 不是C++吧

[ 本帖最后由 mmmmmmmmmmmm 于 2012-12-18 23:30 编辑 ]
#11
冯jungle2012-12-18 23:44
回复 10楼 mmmmmmmmmmmm
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
嗯,好吧;
#12
pangding2012-12-19 09:25
你的 cpp 里有包含自己写的那个头文件吗?
#13
pangding2012-12-19 09:41
看了一下,楼主的逻辑有点乱呀。

你可以在头文件里声明 extern 的变量,然后在 cpp 里定义 cpp 自己要用的东西。如果有些辅助变量只是某个 cpp 要用,就不需要声明在头文件里了。
使用多文件编译有一些常见的技巧,比如:
程序代码:
// example.h
#ifndef EXAMPLE_H
#define EXAMPLE_H

// 变量声明
extern int a;    // 只声明 a,不声明 b

// 函数声明
void p();        // 声明函数

#endif
程序代码:
// main.cpp
#include <iostream>
#include "example.h"    // 该用到的东西这里面应该声明好了,

int main()
{
    cout << a << endl;    // 因此用的时候可以直接用,这才有头文件的意义
    p();

    return 0;
}
程序代码:
// example.cpp
#include <iostream>
#include "example.h"

int a = 5;    // 其实 a 的定义在这。用头文件的人不用管具体实现的位置。
static int b; // 这还有这个文件里自己要用到的变量,自己声明自己用,外边的人甚至看不见。

void p()
{
    b = 3;
    cout << b << endl;
}

当然这些都是 c 风格的方法。c++ 有自己的一套处理原则,不过看来楼主也不太需要用到,就先不提了。


[ 本帖最后由 pangding 于 2012-12-19 09:43 编辑 ]
1