gpt4 book ai didi

c - 接受来自用户的二进制字符串并检查其在 C 中的有效性?

转载 作者:太空宇宙 更新时间:2023-11-04 04:13:30 25 4
gpt4 key购买 nike

我正在尝试要求用户输入两个二进制序列并检查它们是否有效。这是我的代码。

char seq1[8], seq2[8];
printf("Enter 1st 8-bit sequence: ");
scanf("%8s", seq1);
getchar();
printf("\nEnter 2nd 8-bit sequence: ");
scanf("%8s", seq2);
getchar();
printf("\n");
printf("%s\n", seq1);
printf("%s\n", seq2);

if(strlen(seq1) < 8 || strlen(seq2) < 8){
printf("Error: must enter 8-bits\n");
exit(1);
}
for(int i = 0; seq1[i]!='\0'; i++){
if(seq1[i]>48||seq1[i]<49){
printf("Error: non-binary detected\n");
exit(1);
}

}
for(int i = 0; seq2[i]!='\0'; i++){
if(seq2[i]>48||seq2[i]<49){
printf("Error: non-binary detected\n");
exit(1);
}

}

打印字符串时,我将第二个字符串 (seq2) 添加到 seq1 的末尾,并且它总是返回为“检测到非二进制”,即使它全是 1 和 0。

example

最佳答案

您的代码有一些问题。

让我们尝试在您的诊断消息中添加一些额外信息:

if (strlen(seq1) < 8 || strlen(seq2) < 8) 
{
printf("Error: must enter 8-bits; strlen(seq1) = %zu strlen(seq2) = %zu\n", strlen(seq1), strlen(seq2));
exit(1);
}
for (int i = 0; seq1[i] != '\0'; i++)
{
if (seq1[i] > 48 || seq1[i] < 49)
{
printf("Error: non-binary detected (seq1[%d] = 0x%hhX)\n", i, seq1[i]);
exit(1);
}

}
for (int i = 0; seq2[i] != '\0'; i++)
{
if (seq2[i] > 48 || seq2[i] < 49)
{
printf("Error: non-binary detected (seq2[%d] = 0x%hhX)\n", i, seq2[i]);
exit(1);
}
}

我们立即观察到错误消息:Error: non-binary detected (seq1[0] = 0x31)。这很奇怪,因为 0x31 是数字 1 的 ASCII 代码,它应该是可接受的二进制数字。在这里重新考虑您的逻辑:

seq1[i] > 48 || seq1[i] < 49 // In other words seq1[i] > '0' || seq1[i] < '1'

如果 seq1[i] 包含大于 '0' 的值或者它包含小于 的值,则此语句为真'1'。换句话说,此语句将始终 为真并调用错误处理程序。您要测试的正确条件是:

if(seq1[i] != '0' && seq1[i] != '1')

此外,如果您正在读取一个 8 个字符长的字符串,则您的缓冲区中至少需要 9 个字符来保存空终止符。

此外,在条件中显式包含 != '\0' 是多余的。

关于c - 接受来自用户的二进制字符串并检查其在 C 中的有效性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54519760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com