循环一个程序,该程序转换为大写字母并在C中移动4个字母的等级
该程序调用两个函数uppercase()(将输入转换为大写)和shift()(将等级输入移位) 下面是我的大写()函数:循环一个程序,该程序转换为大写字母并在C中移动4个字母的等级,c,C,该程序调用两个函数uppercase()(将输入转换为大写)和shift()(将等级输入移位) 下面是我的大写()函数: void uppercase(char *p) { if(islower(*p)) { *p = toupper(*p); } } void shift(char *p1, char *p2, char *p3, char *p4) { int count = 0; do { ++count; char tmp; tmp = *p4; *p
void uppercase(char *p)
{
if(islower(*p)) {
*p = toupper(*p);
}
}
void shift(char *p1, char *p2, char *p3, char *p4)
{
int count = 0;
do {
++count;
char tmp;
tmp = *p4;
*p4 = *p3;
*p3 = *p2;
*p2 = *p1;
*p1 = tmp;
printf("Grades Shifted #%i: %c %c %c %c \n", count, *p1, *p2, *p3, *p4);
} while (count < 4);
}
下面是shift()函数:
void uppercase(char *p)
{
if(islower(*p)) {
*p = toupper(*p);
}
}
void shift(char *p1, char *p2, char *p3, char *p4)
{
int count = 0;
do {
++count;
char tmp;
tmp = *p4;
*p4 = *p3;
*p3 = *p2;
*p2 = *p1;
*p1 = tmp;
printf("Grades Shifted #%i: %c %c %c %c \n", count, *p1, *p2, *p3, *p4);
} while (count < 4);
}
无效移位(char*p1、char*p2、char*p3、char*p4)
{
整数计数=0;
做{
++计数;
char-tmp;
tmp=*p4;
*p4=*p3;
*p3=*p2;
*p2=*p1;
*p1=tmp;
printf(“等级移位#%i:%c%c%c\n”,计数,*p1,*p2,*p3,*p4);
}而(计数<4);
}
这是我的主要功能
#include <stdio.h>
#include <ctype.h>
main (void)
{
float choice;
do {
char c1, c2, c3, c4;
printf ("Enter 4 letter grades to find statistics: ");
scanf("%c %c %c %c", &c1, &c2, &c3, &c4);
getchar();
uppercase(&c1);
uppercase(&c2);
uppercase(&c3);
uppercase(&c4);
printf("Input Grades: %c %c %c %c\n", c1, c2, c3, c4);
shift(&c1, &c2, &c3, &c4);
printf("Want to shift more grades (y/n)? ");
choice = getchar();
} while ( choice == 'y' || choice == 'Y');
getchar();
}
#包括
#包括
主(空)
{
浮动选择;
做{
煤焦c1、c2、c3、c4;
printf(“输入4个字母的等级以查找统计信息:”);
scanf(“%c%c%c%c”、&c1、&c2、&c3和&c4);
getchar();
大写(&c1);
大写(&c2);
大写(&c3);
大写(&c4);
printf(“输入等级:%c%c%c%c\n”,c1、c2、c3、c4);
班次(c1、c2、c3和c4);
printf(“想要转移更多等级(是/否)?”;
choice=getchar();
}while(choice='y'| choice='y');
getchar();
}
我的输出如下所示
输入4个字母等级以查找统计信息:abcd输入等级:A B C D
成绩变化#1:D A B C
等级转移#2:C D A B
等级转换#3:B C D A
等级转移#4:A B C D
想要转换更多等级(是/否)?y
输入4个字母级别以查找统计信息:adff
输入等级:
A D F
等级变化#1:F
A D
等级转移#2:df
A
等级转移#3:ADF
等级转移#4:
A D F
想要转换更多等级(是/否) 格式在第二次输入时出错,当我在第二次输入后再输入一个y时,程序关闭。在过去的一个小时里,我一直在修补这个问题,我不明白为什么我的格式会出错,或者为什么循环在第三次尝试时会关闭/崩溃 我怎样才能使我的主函数只接受A-D或F的输入呢
谢谢。我想这是因为您的getchar()输入中有一个新行 当您输入“y”然后按enter键时,您将得到“y\n” 重新进入do while循环时清除输入
printf("Want to shift more grades (y/n)? ");
choice = getchar();
c = getchar();
while (c != '\n' && c != EOF)
c = getchar();
} while ( choice == 'y' || choice == 'Y');
关于第二个问题:
你需要检查c1,c2,c3,c4的值,幸运的是有一个函数
while( !(isalpha(c1) && isalpha(c2) && isalpha(c3) && isalpha(c4)) )
printf ("Enter 4 letter grades to find statistics: ");
scanf("%c %c %c %c", &c1, &c2, &c3, &c4);
getchar();
请注意,isalpha函数只是检查每个字符的值。。。这是一个ascii表,请注意A-Z和A-Z的位置
scanf/getchar()行清除:我认为这是因为在getchar()输入中有一个新行 当您输入“y”然后按enter键时,您将得到“y\n” 重新进入do while循环时清除输入
printf("Want to shift more grades (y/n)? ");
choice = getchar();
c = getchar();
while (c != '\n' && c != EOF)
c = getchar();
} while ( choice == 'y' || choice == 'Y');
关于第二个问题:
你需要检查c1,c2,c3,c4的值,幸运的是有一个函数
while( !(isalpha(c1) && isalpha(c2) && isalpha(c3) && isalpha(c4)) )
printf ("Enter 4 letter grades to find statistics: ");
scanf("%c %c %c %c", &c1, &c2, &c3, &c4);
getchar();
请注意,isalpha函数只是检查每个字符的值。。。这是一个ascii表,请注意A-Z和A-Z的位置
scanf/getchar()行清除:您可以使用scanf()而不是getchar(),因为scanf将停止直到到达一个空格您可以使用scanf()而不是getchar(),因为scanf将停止直到到达一个空格为什么选择是一个浮点?@OsamaJaved我在某处看到有人这样做,并假设这是我必须做的。我应该把它改成一个字符吗?是的,把它改成一个
char
为什么选择是一个浮点数?@OsamaJaved我在某处看到有人这样做,并认为这是我必须做的事情。我应该把它改成一个字符吗?是的,把它改成一个char
这就解决了我的问题。非常感谢。这部分做什么while(c!='\n'&&c!=EOF)
我不确定新行是如何“位于我的getchar()输入中”的,请你为我指出这一点好吗?它一直在调用getchar(),直到它读取新行(在Linux/Unix中输入)或EOF(文件结尾,我相信是-1)这解决了我的问题。非常感谢。这部分做什么while(c!='\n'&&c!=EOF)
我不确定新行是如何“位于我的getchar()输入中”的,请您为我指出这一点好吗?它一直调用getchar(),直到它读取新行(在Linux/Unix中输入)或EOF(文件结尾,我相信是-1)