如何找出用户输入包含C中的非ASCII字符
我正在使用fgets()读取用户输入,并检查是否存在一些不允许的符号 例如,如果用户键入“š”,我会注意到它,因为“š”的值高于127。但是当用户输入“ασΔφ”或“жжжФ”时,我的代码将不起作用,因为这些符号将被完全忽略并替换为“?” 我的代码:如何找出用户输入包含C中的非ASCII字符,c,ascii,user-input,fgets,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 AS
char input[100];
fgets(input, 100, stdin);
for (int i = 0; i < strlen(input) - 1; i++)
{
/// Check, if input[i] is ASCII symbol
}
char输入[100];
fgets(输入,100,标准输入);
对于(int i=0;i
当用户输入“š”时,变量输入中将为“š”。但当用户输入“掴”时,int变量输入将是“?”,问号是有效的ASCII字符
如何修复它
编辑:
操作系统:Windows 10
IDE:Visual Studio 2015
代码:
for(大小i=0;i127*/)
{
误差=4;
打破
}
}
如果我暂停一个程序,用户输入“ασΔφ”的数组输入的内容是63,63,63,63,10
编辑2:
现在我完全糊涂了。我试着在Ubuntu上编译和运行,一切正常。但在Windows上,它仍在用问号取代非ASII符号。你知道如何让它在Windows上工作吗?我认为你应该使用
isascii(int-ch)
函数定义在ctype.h
标题中:
#include <ctype.h>
char input[100];
fgets(input, 100, stdin);
for (int i = 0; i < strlen(input) - 1; i++)
{
if (isascii((int)input[i]) {
/* If ASCII */
} else {
/*If non-ASCII */
}
}
#包括
字符输入[100];
fgets(输入,100,标准输入);
对于(int i=0;i
您也可以使用此选项:
#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");
}
}
#包括
main(){
字符输入[100];
fgets(输入,100,标准输入);
对于(int i=0;i
从您提供的详细信息很难判断,但我认为问题不在您的代码中。当您提到它在Ubuntu上工作时,这暗示您的控制台遇到了编码问题
如果stdin是一个文件句柄,这不应该是一个问题,但听起来您正试图从命令行和复制/粘贴输入中使用stdin。如果控制台字体不支持,Windows命令提示符将unicode字符转换为“?”。有关详细信息,请参阅此问题和接受的答案:
你是如何运行你的代码的?你是说
fgets
会将它们写入你的缓冲区(数组输入
)正如?
?如果你在调试器中逐字节查看内容,实际值是?
的ASCII码?我真的很难相信。你使用的是什么操作系统?你在哪种终端上运行程序?你的本地设置是什么?“我的代码不起作用”和“输入将”?“-->发布进行打印的代码。类型char
可以是有符号的,也可以是无符号的,这是特定于实现(编译器)的。这意味着如果char
未签名,则input[i]<0
将是错误的。Visual Studio 2015使用哪种编译器?
#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");
}
}