我是C语言的新手,已经在这里做了一个小时,但我发现了循环迭代的奇怪行为 这段代码
int main(int argc, char** argv)
{
int c;
int big;
int small;
while(c=getchar())
{
if(c>='A' && c<='Z');
big++;
printf("%d",big);
}
printf("end");
}
只要有大写字符,应该增加int。但它总是打印像5452之类的大数字等等,我是否想念c语言中的迭代或我的简单代码中有错误?
答案 0 :(得分:5)
你有垃圾分号,big++
被执行,无论c>='A' && c<='Z'
如何
您还必须初始化big
。
此外,此代码取决于字符代码,因此如果未被禁止,则应使用isupper
。
#include <stdio.h>
#include <ctype.h>
int main(int argc, char** argv) {
int c;
int big = 0;
int small;
while(c=getchar()){ /* this loop should go infinitely in most case : compare with EOF to detect the end of input */
if(isupper(c))
big++;
printf("%d",big); /* maybe you want to print newline after this */
}
printf("end");
return 0;
}
答案 1 :(得分:4)
int big;
big
刚刚声明不是初始化,因此给出了垃圾值。
int big=0; // also initialize small
会工作。
并且
if(c>='A' && c<='Z');
^ will terminate if statement then and there
即使;
条件为big
,if
false
也将被提升。;
之后删除if
。
答案 2 :(得分:4)
在您的情况下,您需要将big
和其他变量初始化为0:
int c = 0;
int big = 0;
int small = 0;
否则这些变量将包含&#34; random&#34;值。这是一种未定义的行为,您将在C / C ++中遇到很多。
您的代码中的这些行也可能没有达到预期的效果
if(c>='A' && c<='Z');
big++;
if的末尾有一个空语句。删除分号:
if(c>='A' && c<='Z')
big++;
另一个问题是在while循环中打印很大。 getchar()
将返回您键入的任何字符,包括空格。每次键入字符时都会执行printf("%d",big);
,而不是每次键入大写字母或非空格字符时都会执行if (!isspace(c)) {
printf("%d", big);
}
。因此,如果您输入&#34; A A&#34;你会得到&#34; 112&#34;有几种方法可以对此进行排序。一个解决方案:
function path(p) {
if (p) {
_path = p;
return p;
} else {
return _path;
}
}
答案 3 :(得分:2)
你必须用0来初始化变量big。
int big = 0;