【问题标题】:Different results in linux OS than my Windows OSlinux 操作系统中的结果与我的 Windows 操作系统不同
【发布时间】:2020-09-12 04:38:37
【问题描述】:
void destroi_playlist_na_jukebox(jukebox j,char* resto)
{
    int i,k=1,musicas_numero;
    char nome_playlist[MAX_LINHA];
    playlist remove_playlist;

    i= sscanf(resto,"%[^\n^\r]",nome_playlist);


    if( (i==1) && (verifica_existe_playlist(j,nome_playlist) == 1) )
    {
        remove_playlist = (playlist)tira_playlist_jukebox(j,nome_playlist);
        musicas_numero = numero_musicas(remove_playlist);

        if( musicas_numero > 0 )
        {
            while( k <= musicas_numero )
            {
               remove_musica(remove_playlist,1);
               k++;
             }

        }
        destroiGenPlaylist( (void *) remove_playlist);
        printf("Playlist eliminada.\n");
    }
    else
       if( (verifica_existe_playlist(j,nome_playlist) !=1) && (i==1) ) // Problem is here
       {
           printf("Playlist inexistente.\n");
       }
           else printf("Dados invalidos.\n");
 }

问题出在最后一个 if 语句中。我得到了不遵守第一个 if 语句并转到第二个的 resto,那里一切都很好,但问题是在我的计算机上(它有一个 Windows 操作系统)它出于某种原因在我的大学编译器上打印“Dados invalidos”(基于 linux 操作系统)它打印“Playlist inexistente”。发生了什么事,我该如何解决?正确答案是我的电脑上打印的内容。

【问题讨论】:

  • 您能发布minimalcomplete可编译 可重现代码吗?跨度>
  • 快速浏览一下,您的问题可能不在您发布的函数中。您能否确认verifica_existe_playlist 在两台机器上是否返回相同的值?如果verifica_existe_playlist 返回不同的值,那就是问题所在。
  • 已经解决了这个问题,所以这个帖子可以忽略。不过还是谢谢你的回答
  • scanf("%[^\n^\r]", ... 您不想为变量考虑换行符、回车符和插入符号吗?这出乎意料:)

标签: c linux windows


【解决方案1】:

您正在检查\r\n,这是 Windows 行结尾。 Linux/UNIX 行尾只是\n。因此,您可以先检查您正在使用的系统并查看如何继续,或者您可以搜索一个自动检查的功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    相关资源
    最近更新 更多