将用户输入转换为字符数组,并从其他字符中过滤字母?
Converting user input to an array of characters, and filtering letters from other characters?
#include "stdafx.h"
#include "stdlib.h"
#include <ctype.h>
int num = 0;
int i = 0;
int ch = 0;
int letter_index_in_alphabet(int ch) {
if (isalpha(ch) == true) {
char temp_str[2] = { ch };
num = strtol(temp_str, NULL, 36) - 9;
printf("%d is a letter, with %d as its location in the alphabet!", ch, num);
}
else {
return -1;
}
}
int main()
{
char input_str[10];
printf("Please enter a series of up to 10 letters and numbers: \n");
fgets(input_str, 10, stdin);
for (i == 0; i <= 10; i++) {
ch = input_str[i];
letter_index_in_alphabet(ch);
}
return 0;
}
大家好,这是我第一次postSOF!这个程序的目标是从标准输入中读取字符到 EOF。对于每个字符,报告它是否是字母。如果它是一个字母,打印出它在字母表中的相应索引('a' or 'A' = 1, 'b' or 'B' = 2..etc)。我一直在 Whosebug 上搜索其他一些 posts,这帮助我走到了这一步(使用 fgets 和 strtol 函数)。当我 运行 这段代码时,我没有看到语法错误,但在我输入一串字符(例如:567gh3fr)后,程序崩溃了。
基本上,我正在尝试使用 'fgets' 将输入的每个字符放入具有适当索引的字符串中。一旦我有了那个字符串,我就检查每个索引中的字母,如果是,我打印分配给字母表中那个字母的数字。
非常感谢任何帮助或深入了解为什么这没有按预期工作,谢谢!
你有一些问题。
首先,char input_str[10]
只够用户输入 9 个字符,而不是 10 个,因为您需要为字符串结尾的空字节留出一个字符。
其次,你的循环太过分了。对于包含 10 个字符的字符串,索引增加到 9,而不是 10。它也应该在到达空字节时停止,因为用户可能没有输入所有 9 个字符。
要获得字母表中的位置,只需从字符值中减去 A
或 a
的值即可。使用 tolower()
或 toupper()
将字符转换为您要使用的大小写。你的方法可行,但过于复杂和混乱。
letter_index_in_alphabet()
声明为 return int
。但是当字符是字母时,它不会执行 return
语句。我不确定为什么它应该 return 某些东西,因为你从不使用 return 值,但我已将其更改为 return 位置(也许调用者应该是那个打印消息,因此该函数只进行计算)。
在for
循环中,应该是i = 0
进行赋值,而不是i == 0
比较
你也不应该过多地使用全局变量。系统头文件周围应该有 <>
,而不是 ""
.
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h>
int letter_index_in_alphabet(int ch) {
if (isalpha(ch)) {
int num = tolower(ch) - 'a' + 1;
printf("%d is a letter, with %d as its location in the alphabet!\n", ch, num);
return num;
} else {
return -1;
}
}
int main()
{
char input_str[10];
printf("Please enter a series of up to 9 letters and numbers: \n");
fgets(input_str, sizeof(input_str), stdin);
for (int i = 0; input_str[i]; i++) {
letter_index_in_alphabet(input_str[i]);
}
return 0;
}
#include "stdafx.h"
#include "stdlib.h"
#include <ctype.h>
int num = 0;
int i = 0;
int ch = 0;
int letter_index_in_alphabet(int ch) {
if (isalpha(ch) == true) {
char temp_str[2] = { ch };
num = strtol(temp_str, NULL, 36) - 9;
printf("%d is a letter, with %d as its location in the alphabet!", ch, num);
}
else {
return -1;
}
}
int main()
{
char input_str[10];
printf("Please enter a series of up to 10 letters and numbers: \n");
fgets(input_str, 10, stdin);
for (i == 0; i <= 10; i++) {
ch = input_str[i];
letter_index_in_alphabet(ch);
}
return 0;
}
大家好,这是我第一次postSOF!这个程序的目标是从标准输入中读取字符到 EOF。对于每个字符,报告它是否是字母。如果它是一个字母,打印出它在字母表中的相应索引('a' or 'A' = 1, 'b' or 'B' = 2..etc)。我一直在 Whosebug 上搜索其他一些 posts,这帮助我走到了这一步(使用 fgets 和 strtol 函数)。当我 运行 这段代码时,我没有看到语法错误,但在我输入一串字符(例如:567gh3fr)后,程序崩溃了。
基本上,我正在尝试使用 'fgets' 将输入的每个字符放入具有适当索引的字符串中。一旦我有了那个字符串,我就检查每个索引中的字母,如果是,我打印分配给字母表中那个字母的数字。
非常感谢任何帮助或深入了解为什么这没有按预期工作,谢谢!
你有一些问题。
首先,char input_str[10]
只够用户输入 9 个字符,而不是 10 个,因为您需要为字符串结尾的空字节留出一个字符。
其次,你的循环太过分了。对于包含 10 个字符的字符串,索引增加到 9,而不是 10。它也应该在到达空字节时停止,因为用户可能没有输入所有 9 个字符。
要获得字母表中的位置,只需从字符值中减去 A
或 a
的值即可。使用 tolower()
或 toupper()
将字符转换为您要使用的大小写。你的方法可行,但过于复杂和混乱。
letter_index_in_alphabet()
声明为 return int
。但是当字符是字母时,它不会执行 return
语句。我不确定为什么它应该 return 某些东西,因为你从不使用 return 值,但我已将其更改为 return 位置(也许调用者应该是那个打印消息,因此该函数只进行计算)。
在for
循环中,应该是i = 0
进行赋值,而不是i == 0
比较
你也不应该过多地使用全局变量。系统头文件周围应该有 <>
,而不是 ""
.
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h>
int letter_index_in_alphabet(int ch) {
if (isalpha(ch)) {
int num = tolower(ch) - 'a' + 1;
printf("%d is a letter, with %d as its location in the alphabet!\n", ch, num);
return num;
} else {
return -1;
}
}
int main()
{
char input_str[10];
printf("Please enter a series of up to 9 letters and numbers: \n");
fgets(input_str, sizeof(input_str), stdin);
for (int i = 0; input_str[i]; i++) {
letter_index_in_alphabet(input_str[i]);
}
return 0;
}