我是首发,我写了一段代码:
#include<stdio.h>
char c;
char a[100]={0};
int i;
int main(void)
{
while(1)
{
i=0;
while(1){
if((c=getchar())!='\n'){
a[i]=c;
i++;
} else {
break;
}
}
printf("%s\n",a);
}
return 0;
}
现在我知道我想添加一个break语句,当我输入q时,程序将会中断。所以我的新计划是:
#include<stdio.h>
char c;
char a[100]={0};
int i;
int main(void)
{
while(1)
{
i=0;
while(1){
if((c=getchar())!='\n'){
a[i]=c;
i++;
} else {
break;
}
}
printf("%s\n",a);
if(getchar()=='q')break; /*i added this*/
}
return 0;
}
我知道因为getchar()冲突代码不正确,我怎么办,添加类型q break命令。非常感谢。
答案 0 :(得分:1)
不太可能成为你真正想要的东西,但至少这会起作用
#include<stdio.h>
int main(void)
{
char a[100]={0};
int i = 0;
do {
int c = getchar();
switch (c) {
case EOF:
/*EOF*/
return -1;
case '\n':
a[i] = 0;
printf("%s\n",a);
i= 0;
break;
default:
a[i++] =c;
break;
} while (c != 'q' || i > 1);
return 0;
}
答案 1 :(得分:1)
哦,哦!这就是......首先,对于那些试图通过非制导性试验和错误学习的人来说,成功学习可移植的,符合标准的C编程语言的几率非常低。有一本非常好的书可以作为指南使用,但你需要读它并且在你偶然发现它们时进行练习。那是K&amp; R2E,如果你有兴趣的话。我是首发,我已经编写了代码
任何类似于char c; c = getchar();
的内容都是错误的,因为从int
(getchar
返回)到char
的缩小转换会丢弃错误处理信息。
getchar
返回的任何字符值都会被unsigned char
转换为int
,因此技术上更正确(尽管仍然不正确)使用该类型。
错误值以负整数(例如EOF
)的形式返回,不要与字符值混淆,这正是您的代码错误丢弃错误信息。
getchar
返回int
,因此请将值存储到int
,然后测试错误,然后,如果您必须将其转换为unsigned char
。
现在我知道我想添加一个break语句,当我输入q时,程序将会中断。
继上一次讨论后,如果您正确处理错误,这样的要求是多余的,但 easy 要合并。只需插入一个额外的测试以匹配错误处理中的q
,并且presto!
尽管如此,错误处理很可能已经解决了这个问题,因为大多数操作系统都有关闭stdin
的机制,这会导致getchar
返回EOF
因此触发错误处理子句。这通常通过在Linux中按CTRL + d或在Windows中按CTRL + z来实现。
总而言之,如果你还没有阅读过一本书,那么关于C的好书似乎并不是所有对你有益的。一本关于你喜欢的类Unix操作系统的控制台脚本的好书也非常有用。
答案 2 :(得分:0)
试试这段代码:
#include <stdio.h>
#include <stdlib.h>
#define q 113 --> These values are coming from ASCII table.
#define Q 81
int main(void)
{
char ch = 0;
do
{
ch = getchar();
switch(ch)
{
case q:
// your logic goes here
exit(0);
case Q:
// your logic goes here
exit(0);
/* more cases can come here */
}
}
while(1);
}