我在C语言中已经纠结这个循环有一段时间了。我试图通过一个for循环创建一个字符串数组(我不确定我做得对不对。我希望我做得对)。每次我输入一个带有空格的字符串,for循环就会中断并跳过所有迭代。例如,如果我在命令行中写入S 1
,它就会中断。
这是密码:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string.h>
int main(){
int players;
int jerseys;
int count = 0;
int i;
scanf("%d", &jerseys);
scanf("%d", &players);
char size[jerseys], p[players][100];
for(jerseys; jerseys > 0; jerseys--){
scanf(" %c", &size[count]);
count++;
}
getchar();
count = 0;
for(players; players>0; players--){
/*scanf(" %s", p[0] ); */ /*you cant assign arrays in C.*/
getchar();
fgets(p[count], 100, stdin);
printf("%s", p[count]);
printf("%s", p[count][2]); /* LINE 29 */
printf("Hello\n");
count ++;
}
return 0;
}
而且,在第29行,如果我把索引从2改为1,循环就会立即中断,无论我放入什么。
我有一个python代码,它基本上满足了我从C语言中得到的东西:
given = []
jerseys = int(input())
if jerseys == 0:
print(0)
players = int(input())
j = []
requests = 0
for _ in range(jerseys):
size = input()
j.append(size)
for _ in range(players):
p = input().split()
我看了很多地方,我认为问题出在数组上,而不是新的行,但我没有线索。
编辑:
这看起来像是我想要输入的东西(也是我通常尝试输入的东西):
3
3
S
M
L
S 1
S 3
L 2
2条答案
按热度按时间z9smfwbn1#
如果输入字符与控制字符不匹配,或者对于格式化输入来说是错误的类型,则scanf终止,将出错的字符作为下一个要读取的字符。
如果你在命令行中写 1 ',那么
jerseys
被设置为1
,但是players
是一个随机的int,因为 ' 不匹配 %d 格式,所以在你的程序中,你的players
变量可能是一个大的int。因此,当您使用
scanf
时,最好检查返回值,如我运行代码,
segmentation fault
是raise。dwthyt8l2#
发布的代码没有干净地编译!
下面是
gcc
编译器的输出:请更正代码并检查从C库I/O函数返回的状态
关于:
因为编译器输出了几个警告,所以这个语句仅仅意味着编译器对你的意思做了一些猜测(不一定是正确的)。