任何人都可以帮助我,如果再次输入一封信,我的程序如何读取,这样可以提示“信已经读过”?
这是我的代码:
#include <stdio.h>
#include <string.h>
#include <conio.h>
int main()
{
char alphabet[26] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char letter;
int i;
for(i = 0; i < 26; i++)
{
printf("%s\n\n", alphabet);
printf("Choose a letter: ");
letter = getchar();
printf("\n\n");
for(i = 0; i < 26; i++)
{
if (letter == alphabet[i])
{
alphabet[i] = '_';
break; /* This terminates the for() loop */
}
}
printf("Result: %s\n", alphabet);
}
}
答案 0 :(得分:2)
这很容易。您可能有另一个大小为26的数组,并以所有false启动,每当您获得一个字符时,您将相应的插槽设置为true。然后当你得到一个角色并想要检查它是否已经输入时,你只需检查相应的插槽是真还是假。
顺便说一句,我不认为你想要内部for循环使用我。您可能想要使用另一个变量,比如j,因为外部for循环使用i作为控制器,这可能会导致问题。答案 1 :(得分:0)
如果您的输入仅包含大写字母,那么当且仅当您到达内循环的末尾时才会提供该字母,即如果字母表中未找到该字母,则因为它已被_
取代。检查此问题的一种方法是在内循环后检查i
是否等于26。稍微更简洁的方法是使用布尔值来表示你是否突破了内循环。
现在,如果您的输入可以是任何字符,最好使用单独的数组来跟踪已提供的字母,而不是替换alphabet
中的字母。你可以:
const char alphabet[26] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int count[26] = {0};
和
if (letter == alphabet[i])
{
++count[i];
break;
}
准确跟踪每封信件的提交次数。
答案 2 :(得分:0)
我认为你应该有一系列输入的字母,如果没有,你可以使用两个变量
char prevletter;
char latestletter;
在此您可以比较prevletter是否等于最新信件
latestletter = getchar();
if (prevletter == latestletter)
{
printf("Alredy inputted this");
}
else
{
prevletter =latestletter;
}
此代码仅适用于连续字母,如果您想知道某个字母是否已连续输入但在其他尝试之后重复可以使用数组
char inputletters[xx];
use for loop to check if it exist in the array if yes `printf the warning else continue`
char inputletters[xx];
for(i = 0; i < xx; i++)
{
if (letter == inputletters[i])
{
printf("AlreadyInputed");
Break;
}
}
然后在插入输入字母的过程中进行处理,如果输入字母数组中不存在
答案 3 :(得分:-1)
我不完全理解你的代码,它看起来像我与PHP混合使用javascript。无论如何,....如果它取决于我,我会采取不同的方法,并假设我们在这里谈论PHP,虽然你可以在javascript中做同样的事情,首先创建一个数组。每次输入一个字母,我都会检查字母是否在数组中。如果是,您可以弹出一个警告,说明该字母已被输入,如果没有,则“推”该字母中的那个字母。
像这样......
<?php
$a = array();
$input is "a";
if (in_array($input, $a)) // if the letter "a" ($input) is in the array...
{
echo "This letter was already entered.";
}
else // if it's not in the array
{
array_push($a, $input); // add the letter ($input) to the array
}
?>
如果您想使此不区分大小写,可以将所有输入转换为小写(或大写)
$input = strtolower("a");