【问题标题】:Breaking for loops in C ends program在 C 中打破 for 循环结束程序
【发布时间】:2015-03-20 03:16:48
【问题描述】:

所以,我是 C 编程和一般编程的初学者(我知道一点 JavaScript,哈哈)。我正在尝试编写一个程序,该程序在整数数组中搜索用户的编号(编号),将其登录,并为他们提供有关其帐户的信息。

请注意,我只是为了好玩和练习而制作这个,没有特别的原因。

我的问题:我使用for 循环来增加我的int i; 变量来搜索数组。代码:

main () {
    int userNo [9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    float ultarCloud [9] = {12.04, 17.33, 8.9, 2.1, 13.75, 23.2, 25.0, 19.0, 5.34};
    int scan;
    int accountNo;
    int found = 0;
    int choice = 0
    for (scan=0; scan<10; scan++)
    {
        printf("\n\t\tPlease enter your Ultra-Cloud account No.:");
        scanf(" %d", &account);
        if (accountNo == userNo[scan])
        {
            found = 1; //statement becomes true
            break;
        }
    }
    if (found = 1)
    {
        do {...}

发生的情况是程序只接受int scan; 的值是当用户键入他们的编号时,并且只会在键入不正确的值时结束 for 循环(不在 userNo 数组中的东西)。当输入错误答案时,程序会完全结束。

我做错了吗?如果您知道出了什么问题,请告诉我。任何建议也非常感谢。我正在使用 code::blocks IDE 顺便说一句。只是为了让你知道我没有太多使用堆栈溢出,所以如果我问“错误”的方式,请告诉我。谢谢

【问题讨论】:

  • if (found = 1) 更改为if (found == 1) 以及scanf 中的account 是什么?
  • 代码无法编译,如果编译,会产生警告,指出您的错误。
  • 它会编译。如果你们中的任何一个都不知道 c 编程 scanf() 用于提示用户:)

标签: c arrays loops for-loop


【解决方案1】:
int found, choice; 
found = choice = 0; 
for (scan = 0; scan < 9; scan++) 
{ 
        printf("\n\t\tPlease enter your Ultra-Cloud account No.: "); 
        scanf(" %d", &accountNo); 
    if (accountNo == userNo[scan]) 
    { 
        found = 1; //statement becomes true 
        break; 
    } 
} 
if (found == 1) 
{ 

我也相信您的 printf 语句的意思是 printf("\n\t\t请输入您的用户帐号:");

另外,我建议你观看这个关于风格的短视频:http://cs50.tv/2012/fall/shorts/style/style-720p.mp4

【讨论】:

  • 谢谢。它实际上应该说“超云”我相信云存储系统,这是用户在那里的信息。哈哈。但是是的,我没有意识到我有多少错别字。
【解决方案2】:

你有很多问题。

搜索数组。

for (scan=0; scan<10; scan++) 
{ 
printf("\n\t\tPlease enter your Ultra-Cloud account No.:"); 
scanf(" %d", &account); 
if (accountNo == userNo[scan])

这不是您搜索数组的方式。您要求用户为循环检查的每个点输入一个新号码。要进行搜索,您需要获取一个要搜索的号码,然后在所有地点搜索该号码。实际上,用户第一次可以输入数字 2,当循环正在查看包含 1 的点时,用户可以在循环正在查看包含 2 的点时输入 1,依此类推。

if (found = 1)

这是在做作业。您的编译器应该对此发出警告。如果没有,请调高警告级别。如果仍然没有,请寻找另一个编译器或 lint 工具来捕获此错误。您可以查看更多警告以修复 here

scanf(" %d", &account); 

我认为这是一个错字;您的程序似乎不包含变量account。它有一个accountNo

for (scan=0; scan<10; scan++)

您的数组有九个条目。此代码将访问超出范围的userNo[9]

main () 

这在 C89 中是合法的,但您不应该这样做。这在 C99 中是不合法的。使用int main()。此外,C89 不允许 // cmets。选择一个语言标准并坚持下去。就我个人而言,我会选择 C99 而不是 C89。

【讨论】:

  • 谢谢。我实际上正在使用 C11,根据我正在阅读的书(“C 编程绝对初学者指南”),它并没有真正超越 main () 函数。我没有意识到我所有的错别字!哎呀
【解决方案3】:

改变循环条件

scan<10

scan<9

您的程序因数组索引超出范围而崩溃,因为您的数组范围为: userNo [0] - userNo [8]

【讨论】:

    【解决方案4】:

    您在scanf 中有一个名为account 的变量。我想你的意思是accountNo

    您在 userNo 数组中搜索,而不是在 ultarCloud 数组中搜索。

    for (scan=0; scan<9; scan++)
    {
      printf("\n\t\tPlease enter your Ultra-Cloud account No.:");
      scanf(" %d", &accountNo);
      if (accountNo == ultarCloud[scan])
      {
       found = 1; //statement becomes true
       break;
      }
    } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-11
      • 2015-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多