for 循环中的 Else 语句将不起作用
Else statement inside for loop won't work
编辑:问题已解决,谢谢大家。我知道问题没有得到很好的解释,很抱歉。
#include <stdio.h>
int main()
{
int line=0;
int longest=0;
int v1[3][3]={{1,0,0},{1,1,1},{7,8,9}};
for(int i=0 ; i<3;i++){
for(int j=0; j<2 ;j++ ){
if(v1[i][j]==0){
int temp=1;
for(int k=j+1; k< 3; k++){
printf("%d\n",k);
if( v1[i][k]==0 ){
temp++;
}
if( v1[i][k]=!0 ){
if( temp>longest ){
longest=temp;
line=i+1;
}
}
}
}
}
}
printf("line:%d\nlenght:%d",line,longest);
}
我有这样的代码。当我尝试将 else 语句与 if 语句一起使用时,如果不满足 if 语句中的要求,else 语句将不起作用。
if( v1[i][k]==0 ){
temp++;
}
else{
if( temp>longest ){
longest=temp;
line=i+1;
}
但是当我使用另一个 if 语句时它会 运行 当满足 v1[i][k]!=0 条件时。
if( v1[i][k]==0 ){
temp++;
}
if( v1[i][k]!=0 ){
if( temp>longest ){
longest=temp;
line=i+1;
}
替换=!与!=
偶尔的错误很难发现。
在 C 中,'!=' 表示“不等于”。
而 '=!'是赋值与逻辑否定的组合。
'x=!0' 等同于 'x=1'
在此声明中
if( v1[i][k]=!0 ){
有错字。应该有
if( v1[i][k] != 0 ){
但无论如何第一个和第二个程序都有逻辑错误。这个 if 语句
if( temp>longest )
必须放在内部 for 循环之外。
for(int k=j+1; k< 3; k++){
而且这个循环中的条件
for(int j=0; j<2 ;j++ ){
应为 j < 3
而不是 j < 2
。否则当一行只包含最后一个元素等于零的情况将被忽略。
这是一个演示程序,展示了如何编写 for 循环。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
enum { N = 10 };
int a[N][N];
srand( ( unsigned int )time( NULL ) );
for ( int i = 0; i < N; i++ )
{
for ( int j = 0; j < N; j++ )
{
a[i][j] = rand() % 2;
}
}
for ( int i = 0; i < N; i++ )
{
for ( int j = 0; j < N; j++ )
{
printf( "%d ", a[i][j] );
}
putchar( '\n' );
}
putchar( '\n' );
int line = 0;
int longest = 0;
for ( int i = 0; i < N; i++ )
{
for ( int j = 0, k = 1; j < N - longest; j += k, k = 1 )
{
if ( a[i][j] == 0 )
{
while ( j + k < N && a[i][j + k] == 0 ) ++k;
if ( longest < k )
{
longest = k;
line = i + 1;
}
}
}
}
if ( line != 0 )
{
printf( "line: %d, length: %d\n", line, longest );
}
else
{
puts( "There is no row with elements equal to 0" );
}
return 0;
}
程序输出可能看起来像
0 0 0 1 1 0 0 1 0 0
1 1 0 1 0 1 1 0 1 1
1 1 0 1 1 0 0 0 1 1
1 1 0 1 0 1 0 0 0 0
1 1 0 1 0 0 0 0 1 1
1 0 0 1 1 1 0 1 1 1
1 0 0 1 0 0 0 0 0 0
0 1 1 0 0 0 1 1 0 0
0 1 0 1 1 0 0 1 1 0
0 0 0 0 1 0 0 1 0 0
line: 7, length: 6
编辑:问题已解决,谢谢大家。我知道问题没有得到很好的解释,很抱歉。
#include <stdio.h>
int main()
{
int line=0;
int longest=0;
int v1[3][3]={{1,0,0},{1,1,1},{7,8,9}};
for(int i=0 ; i<3;i++){
for(int j=0; j<2 ;j++ ){
if(v1[i][j]==0){
int temp=1;
for(int k=j+1; k< 3; k++){
printf("%d\n",k);
if( v1[i][k]==0 ){
temp++;
}
if( v1[i][k]=!0 ){
if( temp>longest ){
longest=temp;
line=i+1;
}
}
}
}
}
}
printf("line:%d\nlenght:%d",line,longest);
}
我有这样的代码。当我尝试将 else 语句与 if 语句一起使用时,如果不满足 if 语句中的要求,else 语句将不起作用。
if( v1[i][k]==0 ){
temp++;
}
else{
if( temp>longest ){
longest=temp;
line=i+1;
}
但是当我使用另一个 if 语句时它会 运行 当满足 v1[i][k]!=0 条件时。
if( v1[i][k]==0 ){
temp++;
}
if( v1[i][k]!=0 ){
if( temp>longest ){
longest=temp;
line=i+1;
}
替换=!与!= 偶尔的错误很难发现。 在 C 中,'!=' 表示“不等于”。 而 '=!'是赋值与逻辑否定的组合。 'x=!0' 等同于 'x=1'
在此声明中
if( v1[i][k]=!0 ){
有错字。应该有
if( v1[i][k] != 0 ){
但无论如何第一个和第二个程序都有逻辑错误。这个 if 语句
if( temp>longest )
必须放在内部 for 循环之外。
for(int k=j+1; k< 3; k++){
而且这个循环中的条件
for(int j=0; j<2 ;j++ ){
应为 j < 3
而不是 j < 2
。否则当一行只包含最后一个元素等于零的情况将被忽略。
这是一个演示程序,展示了如何编写 for 循环。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
enum { N = 10 };
int a[N][N];
srand( ( unsigned int )time( NULL ) );
for ( int i = 0; i < N; i++ )
{
for ( int j = 0; j < N; j++ )
{
a[i][j] = rand() % 2;
}
}
for ( int i = 0; i < N; i++ )
{
for ( int j = 0; j < N; j++ )
{
printf( "%d ", a[i][j] );
}
putchar( '\n' );
}
putchar( '\n' );
int line = 0;
int longest = 0;
for ( int i = 0; i < N; i++ )
{
for ( int j = 0, k = 1; j < N - longest; j += k, k = 1 )
{
if ( a[i][j] == 0 )
{
while ( j + k < N && a[i][j + k] == 0 ) ++k;
if ( longest < k )
{
longest = k;
line = i + 1;
}
}
}
}
if ( line != 0 )
{
printf( "line: %d, length: %d\n", line, longest );
}
else
{
puts( "There is no row with elements equal to 0" );
}
return 0;
}
程序输出可能看起来像
0 0 0 1 1 0 0 1 0 0
1 1 0 1 0 1 1 0 1 1
1 1 0 1 1 0 0 0 1 1
1 1 0 1 0 1 0 0 0 0
1 1 0 1 0 0 0 0 1 1
1 0 0 1 1 1 0 1 1 1
1 0 0 1 0 0 0 0 0 0
0 1 1 0 0 0 1 1 0 0
0 1 0 1 1 0 0 1 1 0
0 0 0 0 1 0 0 1 0 0
line: 7, length: 6