#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;
}
大家好,这是我在SOF上的第一篇文章!该程序的目标是从标准输入到EOF读取字符。对于每个角色,报告它是否是一个字母。如果是字母,请在字母表中打印出相应的索引(&#39; a&#39;或&#39; A&#39; = 1,&#39; b&#39;或&#39; B&# 39; = 2..etc)。我一直在搜索stackoverflow上的其他帖子,这帮助我做到这一点(使用fgets和strtol函数)。我运行此代码时没有可见的语法错误,但是在输入一串字符(例如:567gh3fr)后,程序崩溃了。
基本上,我正在尝试使用&#39; fgets&#39;将每个字符输入到具有适当索引的字符串中。一旦我有了这个字符串,我会检查每个索引的字母,如果是,我打印分配给该字母表字母的数字。
非常感谢任何帮助或洞察为什么这不符合预期的工作,谢谢!
答案 0 :(得分:1)
你有一些问题。
首先,char input_str[10]
仅足以让用户输入9个字符,而不是10个字符,因为您需要允许一个字符用于结束字符串的空字节。
其次,你的循环太过分了。对于包含10个字符的字符串,索引最多为9而不是10.当它到达空字节时也应该停止,因为用户可能没有输入所有9个字符。
要获得字母表中的位置,您只需从字符值中减去A
或a
的值即可。使用tolower()
或toupper()
将字符转换为您要使用的字词。你的方法有效,但它过于复杂和令人困惑。
letter_index_in_alphabet()
返回int
。但是当字符是字母时,它不会执行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;
}