如何找出该用户输入在C中包含非ASCII字符

时间:2019-03-16 12:29:33

标签: c ascii user-input fgets

我正在使用fgets()读取用户输入,并且正在检查是否存在一些不允许的符号。

例如,如果用户键入“š”,我会注意到它,因为“š”的值大于127。但是当用户键入“ασδφ”或“жщдф”时,我的代码将不起作用,因为这些符号被完全忽略并由“?”代替。

我的代码:

char input[100];
fgets(input, 100, stdin);
for (int i = 0; i < strlen(input) - 1; i++)
{
    /// Check, if input[i] is ASCII symbol
}

当用户键入“š”时,变量输入将为“š”。但是,当用户键入“щ”时,int变量输入将为“?”。并且问号是有效的ASCII字符。

如何解决?

编辑:

操作系统:Windows 10

IDE:Visual Studio 2015

代码:

for (size_t i = 0; i < strlen(input); i++)
{
    printf("%c %d\n", input[i], input[i]);
    if (input[i] < 0/* || input[i] > 127*/)
    {
        error = 4;
        break;
    }
}

如果我暂停程序,则用户输入“ασδφ”的数组输入的内容为63、63、63、63、10。

编辑2:

现在我完全感到困惑。我尝试在Ubuntu上编译并运行,一切正常。但是在Windows上,它仍在用问号代替非ASII符号。知道如何在Windows上运行它吗?

3 个答案:

答案 0 :(得分:3)

我认为您应该使用using System; using System.Collections.Generic; using Xamarin.Forms; namespace J.Templates { public partial class HelpGrid : Grid { public HelpGrid() { InitializeComponent(); } } } 标头中定义的isascii(int ch)函数:

ctype.h

答案 1 :(得分:1)

您也可以使用:

#include <stdio.h>

main(){
char input[100];
fgets(input, 100, stdin);
for (int i = 0; i < strlen(input) - 1; i++)
{
    if(input[i]<128 && input[i]>0)
        printf("\nASCII Value");
    else
        printf("\nNot an ASCII Value");
}
}

答案 2 :(得分:0)

很难从您提供的详细信息中看出来,但是我认为问题不在您的代码中。当您提到它可以在Ubuntu上运行时,表明您的控制台存在编码问题。

如果stdin是文件句柄,这应该不成问题,但是听起来您正在尝试从命令行使用stdin并复制/粘贴输入。 Windows命令提示符会将Unicode字符转换为“?”如果您的控制台字体不支持它们。有关更多信息,请参见此问题和公认的答案:

What encoding/code page is cmd.exe using?