我正在使用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上运行它吗?
答案 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字符转换为“?”如果您的控制台字体不支持它们。有关更多信息,请参见此问题和公认的答案: