c - 如何解决:用户输入的字符串不能作为函数正常工作
问题描述
我有一个成功编写的加密代码,询问用户他们是否想要左移或右移以及他们想要移动多少。目标是让程序通过函数工作。我能够将代码的第一部分变成一个函数(学校编程练习),但我一直坚持获取用户输入。函数是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。目前,它只显示了一堆奇怪的字符。注意:这不是代码的全部。它不显示加密或解密代码。我知道这可以正常工作,但是我无法使用单独的函数而不是代码主体来使其顺利工作。
解决方案
推荐阅读
- python - azure function service bus python - 读取一堆消息
- cmd - Python-Nuitka 无法使用我设置的图标将 .py 编译为 .exe
- java - selenium NullPointerException 解决方案的驱动程序
- python - Python - 具有多个数组的多线程将参数传递给函数
- pine-script - 如何在 pine 脚本中按值浮点(值)和另一个字符串(键)数组对数组进行排序?
- c++ - 将静态成员函数与 pthread_create() 一起使用有什么含义?
- r - 如何将额外文件添加到 pkgdown 站点?
- reactjs - React:在回调中设置功能组件的状态
- java - 使用嵌套键的杰克逊多态性
- stripe-payments - Stripe 的 invoice.paid webhook 与订阅开始时间相关的交付时间是什么时候?