C 电影定时显示程序

C 电影定时显示程序,c,string,struct,copying,C,String,Struct,Copying,我一直在制作一个程序,从用户那里收到一个标题电影,现在是时候了。程序使用一个包含char title[20]和char time[20]数组的结构电影来输入字符串,然后我定义了两个指针数组,将结构中扫描的字符串插入其中(指针数组)。扫描和复制处于while循环中,在电影标题中输入-1时停止。 到目前为止,它还可以正常工作,但当我退出循环,插入-1并打印电影名称和时间时,输出结果显示电影标题都是-1,而电影时间只是最后一次计时。如果有什么不清楚的,请告诉我。请帮忙。代码如下: #include&l

我一直在制作一个程序,从用户那里收到一个标题电影,现在是时候了。程序使用一个包含char title[20]和char time[20]数组的结构电影来输入字符串,然后我定义了两个指针数组,将结构中扫描的字符串插入其中(指针数组)。扫描和复制处于while循环中,在电影标题中输入-1时停止。 到目前为止,它还可以正常工作,但当我退出循环,插入-1并打印电影名称和时间时,输出结果显示电影标题都是-1,而电影时间只是最后一次计时。如果有什么不清楚的,请告诉我。请帮忙。代码如下:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

struct movie {
    char title[20];
    char time[20];
};

char *movieTitle[20],*movieTime[20];
int movieCount=0;

int main() {

    struct movie aMovie={"Hello","Hello"};

    puts("*****Welcome to VOX cinemas*****");
    puts("Please enter the movie title (enter -1 to end):");
    scanf("%s" ,&aMovie.title);

    while(aMovie.title[0]!='-'||aMovie.title[1]!='1') {
        puts("Please enter the movie's time");
        scanf("%s" , &aMovie.time);
        movieTitle[movieCount]=aMovie.title;
        movieTime[movieCount]=aMovie.time;
        printf("movieTitle[%d]=%s\n",movieCount,movieTitle[movieCount]); //a checking print
        printf("movieTime[%d]=%s\n",movieCount,movieTime[movieCount]);  //a checking print
        movieCount++;
        puts("Please enter the movie title (enter -1 to end):");
        scanf("%s", &aMovie.title);
    }

    printf("%s",movieTitle[0]);
    int numberOfMovies=movieCount;
    puts("********************************\n\n\nMovie Title\t\tMovie Time");

    for(movieCount=0;movieCount!=numberOfMovies;movieCount++) {
        printf("%s\t\t\t%s\n", movieTitle[movieCount],movieTime[movieCount]);
    }

    while(1);
}
#包括
#包括
#包括
结构电影{
字符标题[20];
半焦时间[20];
};
char*movieTitle[20],*movieTime[20];
int movieCount=0;
int main(){
struct movie aMovie={“你好”,“你好”};
放置(“******欢迎来到VOX电影院******”);
puts(“请输入电影标题(在结尾处输入-1):”;
scanf(“%s”和aMovie.title);
while(aMovie.title[0]!='-'| aMovie.title[1]!='1'){
puts(“请输入电影时间”);
scanf(“%s”和aMovie.time);
movieTitle[movieCount]=aMovie.title;
movieTime[movieCount]=aMovie.time;
printf(“movieTitle[%d]=%s\n”,movieCount,movieTitle[movieCount]);//检查打印
printf(“movieTime[%d]=%s\n”,movieCount,movieTime[movieCount]);//检查打印
movieCount++;
puts(“请输入电影标题(在结尾处输入-1):”;
scanf(“%s”和aMovie.title);
}
printf(“%s”,电影标题[0]);
int numberOfMovies=movieCount;
看跌期权(“**************************************\n\n\n视频标题\t\t移动时间”);
for(movieCount=0;movieCount!=numberOfMovies;movieCount++){
printf(“%s\t\t\t%s\n”,movieTitle[movieCount],movieTime[movieCount]);
}
而(1),;
}

您需要阅读C.中的字符串操作和指针

以下代码行:

movieTitle[movieCount]=aMovie.title; movieTime[movieCount]=aMovie.time; movieTitle[movieCount]=aMovie.title; movieTime[movieCount]=aMovie.time; 你认为他们是干什么的?复制字符串?不。他们将指针复制到字符串。然后返回循环并覆盖字符串(指向它们的任何点都将返回新内容)

试试这个:

movieTitle[movieCount]=strdup(aMovie.title); movieTime[movieCount]=strdup(aMovie.time); movieTitle[movieCount]=标准(aMovie.title); movieTime[movieCount]=标准时间(aMovie.time); 它分配新内存并在其中存储字符串的副本。您应该仔细阅读内存分配和泄漏,但对于您粘贴的内容,这可能已经足够好了:D

编辑:

还有一些提示:

不正确:
scanf(“%s”和&aMovie.title)
正确:
scanf(“%s”,aMovie.title)

不正确:
scanf(“%s”和&aMovie.time)
正确:
scanf(“%s”,aMovie.time)


这是因为
chars[20]
已经是指向预先分配的20字节字符串的指针。s是类型
char*
<代码>&s
将是指向该指针的指针。它将有类型
char**

哥们,你太棒了,它可以工作了!!:D看起来我在理解字符串是如何复制的方面有问题:S你能简单地给我解释一下吗?好的,我明白了^非常感谢,伙计,我很感激是的,对不起,这是我第一次在这里问问题:p