中断不起作用

问题描述 投票:0回答:2
#include <stdio.h>
#include <stdlib.h>

int main() {
    char words[1000][100], lowercase[100];
    int i, j, k, l, m, s, letternumber[100];
    for (i=0; i < 1000; i++){
        scanf("%s", &words[i][0]);
        if (words[i][0] == '\n'){
            break;
        }
        j=0;
        while (words[i][j++] != '\0'){
            letternumber[i]+=1;
        }
    }
    for (s=0; s < i; s++){
        for(m=0; m < letternumber[s]; m++){
            lowercase[m]=words[s][m];
        }
        for (j=0; j < letternumber[s]; j++){   
            words[s][j] = lowercase[m-j];       
        }
    }

    for (l=0; l < n; l++){
        for (k=0; k < letternumber[l]; k++){ 
        printf("%c", words[l][k]);
        }
        printf("\n");
    }
    return 0;
}

这是我的代码,我希望第一个 for 循环在该行的第一个字符是换行符时进行,但无论输入如何,它都会继续

arrays c multidimensional-array
2个回答
1
投票

中断不起作用

break
工作正常。然而
words[i][0] == '\n'
永远不会是真的,因为
scanf("%s", &words[i][0])
永远不会在
'\n'
中保存
words[]

"%s"
中的
scanf("%s", &words[i][0])
有4件事:

  1. '\n'读取0个或更多

    空白
    (包括
    stdin
    )并丢弃它们。继续,直到找到非空白。

  2. 读取 1 个或多个非 空白 并将它们保存到

    words[i]
    中。继续,直到找到空格。将空白返回到
    stdin
    。如果没有像 "%99s" 这样的
    width
    ,则可能会超出范围。

  3. '\0'
    附加到
    words[i]

  4. 如果读取到一些非空格则返回 1,否则返回

    EOF


使用

fgets()

要读取并保存

'\n'
,请使用
fgets()
,因为它旨在读取用户输入的

    //scanf("%s", &words[i][0]);
    if (fgets(words[i], sizeof words[i], stdin) == NULL || words[i][0] == '\n') {
      break;
    }

0
投票

你的程序是把输入的字符串反转吧?

我对你的代码做了一些改进。 我认为有一些不必要的变量。

https://github.com/yinyangwarrior0928/soresolve-break-not-work

谢谢你。

© www.soinside.com 2019 - 2024. All rights reserved.