首页 > 解决方案 > 如何解决:用户输入的字符串不能作为函数正常工作

问题描述

我有一个成功编写的加密代码,询问用户他们是否想要左移或右移以及他们想要移动多少。目标是让程序通过函数工作。我能够将代码的第一部分变成一个函数(学校编程练习),但我一直坚持获取用户输入。函数是getValidMessage(); 我知道我在主代码中正确调用了它。我认为问题可能在于 null 终止字符串,但我不知道出了什么问题。

我有一行代码应该空终止它,并且我认为我对原始代码进行了足够的更改,它应该可以工作。但是,我不确定我是否在函数中正确实现了代码。

// get message to encrypt
//This is called in the main function
char originalMessage[100];
getValidMessage(&originalMessage, sizeof(originalMessage));
int originalMessageLength = strnlen(originalMessage, 
sizeof(originalMessage));


//This is the function
/*
* Gets valid message from user
*/
void getValidMessage(char* message, int messageSize)
{
     char originalMessage[100];
     bool validMessage = false;
     printf("\n");
     printf("Enter message to be encrypted (upper case alphabetic 
     characters only): ");
     fgets(originalMessage, messageSize, stdin);
     int originalMessageLength = strnlen(originalMessage, 
     messageSize) - 1;
     while (!validMessage)
     {
         // invalid if non-upper case alpha characters in 
         // message (don't include newline at end))
         validMessage = true;
         for (int i = 0; i < originalMessageLength; i++)
         {
             if (!isupper(originalMessage[i]))
             {
                 printf("\n");
                 printf("Message must contain only upper "
                 "case alphabetic characters!\n");
                 printf("Enter message to be encrypted "
                 "(upper case alphabetic characters only):");
                 fgets(originalMessage, messageSize, stdin);
                 originalMessageLength = 
                 strnlen(originalMessage, messageSize) - 1;

                 // reset flag and exit for loop
                 validMessage = false;
                 break;
             }
         }
     }
     originalMessage[originalMessageLength] = '\0';
     return originalMessage;
}

我正在使用一个使用 MESSAGE 的正在运行的测试代码。整个代码应该加密和解密代码以显示 OGUUCIG,然后再次显示 MESSAGE。目前,它只显示了一堆奇怪的字符。注意:这不是代码的全部。它不显示加密或解密代码。我知道这可以正常工作,但是我无法使用单独的函数而不是代码主体来使其顺利工作。

标签: c

解决方案


推荐阅读