好的,首先我是编程的全部业余爱好者,我想尝试一下。我想创建一个C程序,它将读取一行,然后如果字符有效则接受字符打印“ACCEPTED”或“REJECTED”。
所以我使用了while循环和一些if-else if添加可行字符。可行字符是字母',''的字母。 '/''['']'。问题是,在我输入整行后,它会为行上的每个字符打印ACCEPTED和REJECTED。如何让程序先读取整行,然后打印结果?
#include <stdio.h>
int main(void) {
char c;
c=getchar();
while(c!=EOF) {
while (c!='\n') {
if (c>='a' && c<='z') {
printf("OK!\n");
}
else if(c==','|| c=='.' ||c=='/') {
printf("OK!\n");
}
else if(c==']'||c=='[') {
printf("OK!\n");
}
else {
printf("ERROR!\n");
}
c=getchar();
}
c=getchar();
}
}
答案 0 :(得分:2)
抱歉,我的原始答案似乎与您的问题无关。脱脂阅读失败。
感谢您发布代码,在正确回答您的问题时,它会有很大的帮助。
暂时忽略样式,我会以这种方式更改你的代码,只有当你完成解析整行时才会打印OK
,这正是@ScottMermelstein所说的,但带有代码。
#include <stdio.h>
int main(void) {
int c; // This needs to be an int otherwise you won't recognize EOF correctly
int is_ok;
c=getchar();
while(c!=EOF) {
is_ok = 1; // Let's assume all characters will be correct for each line.
while (c!='\n') { // So long as we are in this loop we are on a single line
if (c>='a' && c<='z') {
// Do nothing (leave for clarity for now)
}
else if(c==','|| c=='.' ||c=='/') {
// Do nothing (leave for clarity for now)
}
else if(c==']'||c=='[') {
// Do nothing (leave for clarity for now)
}
else {
is_ok = 0; // Set is_ok to false and get out of the loop
break;
}
c=getchar();
}
if (is_ok) // Only print our result after we finished processing the line.
{
printf("OK!\n");
} else
{
printf("ERROR!\n");
}
c=getchar();
}
return 0; // If you declare main to return int, you should return an int...
}
但是,我建议您稍微模块化一下代码。这将伴随着时间和实践,但如果你在适当命名的函数中隐藏东西,你可以用更容易理解的方式编写东西。
#include <stdio.h>
int is_valid_char(int c)
{
return (isalpha(c) || c == ',' || c == '.' || c == '/' || c == '[' || c == ']');
}
int main(void) {
int c;
int is_valid_line;
c=getchar();
while(c!=EOF) {
is_valid_line = 1;
while (c!='\n') {
if (!is_valid_char(c)) {
is_valid_line = 0; // Set is_valid_line to false on first invalid char
break; // and get out of the loop
}
c=getchar();
}
if (is_valid_line) // Only print our result after we finished processing the line.
{
printf("OK!\n");
} else
{
printf("ERROR!\n");
}
c=getchar();
}
return 0;
}
答案 1 :(得分:0)
您可以使用scanf
并在格式说明符%c
前加一个空格来忽略空格。
char ch;
scanf(" %c", &ch);
答案 2 :(得分:0)
这可能就是你要找的东西?
读取一行并处理好/坏字符并打印OK或Error。
#include <stdio.h>
int main ( void )
{
char buff[1000];
char *p = buff ;
char c ;
int flgError= 0 ; // Assume no errors
gets( buff ) ;
printf("You entered '%s'\n", buff );
while ( *p ) // use pointer to scan through each char of line entered
{
c=*p++ ; // get char and point to next one
if ( // Your OK conditions
(c>='a' && c<='z')
|| (c>='A' && c<='Z') // probably want upper case letter to be OK
|| (c==','|| c=='.' ||c=='/')
|| (c==']'||c=='[')
|| (c=='\n' ) // assume linefeed OK
)
{
// nothing to do since these are OK
}
else
{
printf ("bad char=%c\n",c);
flgError = 1; // 1 or more bad chars
}
}
if ( flgError )
printf ( "Error\n" );
else
printf ( "OK\n" );
}